使用loadNibNamed时,owner的含义是什么?

5

苹果文档称在nib文件中最重要的对象之一是File's Owner,但似乎这是nib文件中的File's owner,而不是由LoadNibName方法设置的那个。我想知道它们之间有什么区别?

下面是一个例子:

我从xib自定义一个alertView并提供了一个静态类方法:

+(CustomAlert *)sharedAlert{
    CustomAlert *alert = [[[NSBundle mainBundle] loadNibNamed:@"CustomAlert" owner:nil options:nil]lastObject];
    return alert;
}

我有一种方法可以在视图上显示警报

- (void)showInView:(UIView *)view{
    [view addSubview:self];
}

在我的视图控制器中:

- (IBAction)buttonPressed:(id)sender{
    CustomAlert *alert = [CustomAlert sharedAlert];
    [alert showInView:self.view];
}

在我的情况下它很好用,那么在 [[[NSBundle mainBundle] loadNibNamed: owner: options: 中设置所有者是否必要呢?

1个回答

2
假设您有一个包含一个表格视图的Nib文件,并且该表格视图的委托和数据源已经在接口构建器中连接到“文件所有者”。如果您将文件所有者设置为任何对象,则该对象将成为表格视图的数据源和委托。这对于与文件所有者相关联的任何内容都是有效的。

我知道在nib文件中,文件的所有者很重要,但我想知道它在[[[NSBundle mainBundle] loadNibNamed: owner: options:]中的含义,以及为什么它在我的情况下起作用。 - johnMa
1
你的CustomAlert是UIAlertView或UIButton的子类吗?如果它是一个alertview,你如何设置委托?如果它是一个UIButton,你如何添加目标?在这两种情况下,如果你是通过编程来实现的,你就不需要文件的所有者。 - Taha Selim Bebek
所以你的意思是CustomAlert的文件所有者是CustomAlert类,因为我将目标添加到CustomAlert类中? - johnMa
不,它没有“文件所有者”,也不需要,因为您可以以编程方式添加目标,“文件所有者”不是必需的。 - Taha Selim Bebek
所以你的观点是,在XIB中自定义视图时,所有者不是必需的,可以使用[[[NSBundle mainBundle] loadNibNamed: owner: options:来初始化它。 - johnMa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接