子类化自定义UIViewController(使用xib)以添加其他行为

时间:2013-04-26 12:53:02

标签: ios objective-c cocoa-touch uiviewcontroller xib

这是交易:我正在使用DEFacebookComposeViewController,它是UIViewController的自定义子类。该子类使用xib来设置用户界面。

现在我想向DEFacebookComposeViewController添加一些额外的GUI元素,所以我想我会创建一个名为MySubclassDEFacebookComposeViewController : DEFacebookComposeViewController的子类并创建一个xib。

然而xib MySubclassDEFacebookComposeViewController.xib没有显示来自DEFacebookComposeViewController.xib的任何GUI元素,我认为它会做,因为它是该类的子类。

所以基本上我只是想知道将新元素添加到子类UIViewControllerxib的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

复制DEFacebookComposeViewController.xib并将其重命名为MySubclassDEFacebookComposeViewController.xib并根据您的喜好对其进行修改。

默认情况下,UIViewController会在创建时查找具有相同名称的nib / xib(即使最后没有控制器部分)

来自UIViewController的文档:

  

如果您使用nib文件来存储视图控制器的视图,那么它就是   建议您明确指定该nib文件   初始化视图控制器。但是,如果您没有指定   nib名称,并且不要覆盖自定义中的loadView方法   子类,视图控制器使用other搜索nib文件   手段。具体来说,它会查找具有适当名称的nib文件   (没有.nib扩展名)并在其视图时加载该nib文件   请求。具体来说,它(按顺序)查找带有的nib文件   以下名称之一:

     

如果视图控制器类名称以“Controller”结尾,则为   在MyViewController中,它查找名称与之匹配的nib文件   没有单词“Controller”的类名,如MyView.nib中所示。它看起来   对于名称与视图控制器名称匹配的nib文件   类。例如,如果类名是MyViewController,它看起来   对于MyViewController.nib文件。

因此,您需要指定要使用的nib或在视图控制器后命名它。由于您要添加/修改旧笔尖,因此需要它的副本。

这假设默认情况下DEFacebookComposeViewController.xib没有任何IBOutlets。如果有,您可以修改viewDidLoad中的现有笔尖。无论是否IBOutlets,都可以在加载视图后始终添加更多子视图。