nib文件如何知道其文件的所有者控制器

|| 当创建一个“ 0”和相应的nib文件时,该nib文件通常带有与控制器相同的名称,但是可以重命名。那么,IB如何知道该笔尖文件引用的是哪个“ 0”? 当从参考插座或操作中拖动时,IB仅显示特定控制器的方法。如何选择?当有人重命名笔尖时,我想知道IB是否保存笔尖和ѭ0之间的连接。 好像我的脑子里太混乱了吗? :) 希望不是... 问候, ak     
已邀请:
笔尖文件不一定需要知道文件的所有者是“ 0”的哪个特定子类。请注意,视图控制器拥有的笔尖加载(通常)分两个步骤完成: 实例化
UIViewController
的一个实例 该实例收到ѭ5,因此知道应该加载的nib文件,实例即成为该文件的所有者。 因此,是
UIViewController
(或其子类)实例需要知道nib文件名,但是相反情况不一定成立。 也就是说,子集“ 0”通常定义nib文件中对象的出口并接收动作。为了在Xcode / Interface Builder中连接插座和动作,您可以在身份检查器中将文件的所有者类设置为对应的子类“ 0”。     
如果打开IB并在检查器窗口的第四选项卡中检查文件所有者的类,则可以在此处看到类名。     
我知道这是一个老问题。请在这里分享我的理解。 假设我们在XCode中创建UIViewController的子类,并将其命名为SecondViewController,其xib文件名默认为SecondViewController.xib。然后,让我们先看看如何创建此VC,然后讨论文件的所有者是什么。 使用笔尖名称创建并显示SecondViewController:让我们使用initWithNibName:bundle:创建的VC,并指定xib名称,代码如下所示:
SecondViewController * vc = [[SecondViewController alloc] initWithNibName:@\"SecondViewController\" bundle:nil];
[self presentViewController:vc animated:YES completion:nil];
创建并显示不带笔尖名称的SecondViewController:如果默认情况下一切正常,则意味着VC与xib文件名具有相同的类名,那么我们可以忽略笔尖名称,创建vc的代码可以是这样的:
SecondViewController * vc = [[SecondViewtController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
创建并显示具有不同xib文件名的SecondViewController:如果重命名xib文件名,则在创建VC时必须指定xib文件名,代码如下所示:
SecondViewController * vc = [[SecondViewController alloc] initWithNibName:@\"SecondViewController2\" bundle:nil];
[self presentViewController:vc animated:YES completion:nil];
文件的所有者是什么?首先,正如苹果公司所说,这是一个占位符对象。该对象是xib文件中定义的对象的容器。同样,此对象可以接收由xib中的对象发送的消息,例如,按钮单击消息。创建出口或动作时,其目标将是文件的所有者,但是在设计时该对象是未知的。在界面生成器中,如下所示: 文件的所有者是什么?其次,它是界面生成器中显示的类名称。此类的实例包含xib中定义的对象。它显示如下: 如果我没有为文件所有者设置类名怎么办?在这种情况下,IB将不允许您通过Control-Drag来创建出口或动作,因为它不知道谁将包含出口或动作。 创建出口或操作后,如果删除文件所有者的类名怎么办?可以在IB中删除类名称。您创建的代码将像以前一样正常运行。 让我们回到问题:\“ nib文件如何知道其文件的所有者控制器\”? 在设计时,IB只有在设置了文件的所有者的类名之后才知道所有者控制器。 在运行时,运行时将接收init或initWithNibName:bundle:的对象设置为笔尖的File的Owner对象。     

要回复问题请先登录注册