【问题标题】:Subclass a custom UIViewController (with xib) to add additional behaviour子类化自定义 UIViewController(带有 xib)以添加其他行为
【发布时间】:2013-04-20 15:49:05
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    复制 DEFacebookComposeViewController.xib 并将其重命名为 MySubclassDEFacebookComposeViewController.xib 并根据自己的喜好进行编辑。

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

    来自 UIViewController 的文档:

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

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

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

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

    【讨论】:

    • 好吧,“...假设 DEFacebookComposeViewController.xib 默认没有任何 IBOutlets”是什么意思。 xib 的目的不是让IBOutlets 将 .h/.m 文件与 Interface Builder 连接起来吗?原来的DEFacebookComposeViewController.m全是IBOutlets
    • 可能没有必要用 IBOutlets 连接所有东西——尽管这并不常见。如果它是“充满”的插座,请使用插座通过代码根据您的喜好重新配置现有视图,并通过代码添加新的子视图。
    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 2015-02-04
    • 1970-01-01
    • 2012-04-23
    • 2012-02-01
    • 1970-01-01
    • 2012-02-01
    • 2019-03-31
    相关资源
    最近更新 更多