5

嗨,我正在读一本书,我不得不处理这种情况。我创建了一个名为的 XIB 文件,HeaderView.xib.然后我File Owner将此 XIB 文件的连接到ItemsViewController. 到目前为止一切都很好。我还将 ItemsViewController 的一些出口与 XIB 上的视图连接起来。

现在,在ItemsViewController我不得不调用这样的代码:

- (UIView *)headerView
{
    // If we haven't loaded the headerView yet...
    if (!headerView) {
        // Load HeaderView.xib
        [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];
    }

    return headerView;
}

上面的代码会将点的headerView出口设置ItemsViewController为 XIB 文件上的相应视图(我在 XIB 文件上与之建立连接的那个)。我的问题是,为什么我必须两次指定所有者?(例如,一次在我在此端口开头提到的 XIB 中,第二次在代码中,例如,owner: self)。

4

3 回答 3

6

您没有两次指定文件所有者:

  • 第一次(在 XIB 文件中)您指定了文件所有者的类型;这对于 Interface Builder 知道它可以连接哪些出口是必要的。
  • 第二次(在 Objective C 代码中)您指定了所有者的实例。这在运行时需要知道插座连接到的对象。
于 2013-07-30T11:04:50.150 回答
3

在 XIB 中指定所有者会告诉 Xcode 控制器了解什么(它有哪些插座),以便它可以为您提供连接。这是在班级级别。

在代码中指定所有者会告诉取消归档过程控制器的哪个实例实际上将履行该角色,因此应该建立与从 NIB 取消归档的新实例的连接。

于 2013-07-30T11:05:52.013 回答
1

我找到了...当世界不再使用 XIB 时...在您最喜欢的文本编辑器中打开 XIB 或 NIB 文件

你会在那里找到这条线......

        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MyCalssName">

更改类名,保存文件,文件的所有者将被更改。注意:关闭 Xcode(自动重新加载更改)并进行备份,以防万一你搞砸了。

于 2015-01-30T11:11:25.253 回答