【问题标题】:Add a subview to a custom class UIViewController that loads from nib, in Storyboard在 Storyboard 中将子视图添加到从 nib 加载的自定义类 UIViewController
【发布时间】:2014-07-11 23:22:29
【问题描述】:

澄清这个荒谬的标题:

我正在使用我自己的 JSQMessagesViewController 子类 (https://github.com/jessesquires/JSQMessagesViewController) - 我们称之为 ACMessagesViewController。我正在通过情节提要加载我的 ACMessagesViewController,方法是将情节提要 UIViewController 的自定义类设置为 ACMessagesViewController。我正在尝试通过情节提要向 ACMessagesViewController 的视图添加子视图。

JSQMessagesViewController 从 nib 加载。当我通过情节提要向 ACMessagesViewController 的视图添加子视图时,视图消失了。子视图似乎正在添加到我的 ACMessagesViewController 的 self.view 以外的视图中,并且当 viewdidload 范围运行时,子视图已经消失了。

我的问题是: 1. 当 UIViewController 从笔尖加载时,将子视图(通过情节提要)添加到自定义类 UIViewController 的正确方法是什么? 2. 在这个视图加载过程中发生了什么?为什么我的子视图(通过故事板添加)添加到与我的 ACMessagesViewController 中的 self.view 不同的视图上?

提前致谢!

【问题讨论】:

  • 您的意思是您的视图是在屏幕上绘制然后被删除,还是根本不绘制?
  • 我从未在屏幕上看到它,并且在调用视图确实出现时它已经消失(null)。它的超级视图是一个不是viewcontroller的self.view的视图
  • 您认为 JSQMessagesViewController 是否有可能以编程方式创建自己的视图并在此过程中断开您在情节提要中创建的视图?
  • 是的,我认为这就是正在发生的事情。但我不确定这个循环是如何运作的。尝试了解更多关于它的信息,并查看是否有办法从 nib 加载,同时还可以通过情节提要添加视图。

标签: ios iphone xcode storyboard xib


【解决方案1】:

我认为这是你在 iOS 开发中经常遇到的“如果你需要解决它,你可能做错了”的场景之一。 :-) 真的,如果你想要 JSQMessagesViewController 提供的功能,你不需要添加额外的视图。但是,如果您必须添加视图,那么“正确”的做法是在 viewDidLoad 中调用 super 之后将它们添加为任何 self.view 的子视图。如果您不想以编程方式构建视图,可以将它们放在单独的 nib(而不是情节提要)中并手动加载它们。

(注意:这是假设 viewDidLoad 被调用。如果没有,您可能需要挂钩到其他方法。)

【讨论】:

  • 我最终选择了程序化路线。只是想知道这里是否有关于故事板和视图加载的知识。
  • 我遇到了同样的问题。问题似乎是 JSQMessagesViewController 使用了一种非常规的方式来加载其视图。应该可以在不加载第二个笔尖的情况下做你想做的事。只是......不是这个特定的图书馆。
  • 我会回答你的问题 2),因为 Anna 没有回答。这不起作用的原因是你有这个:1)superclass + superclass.nib 2)subclass + subclass.nib 当你初始化时,你得到的是 subclass + superclass.nib 但是你将你的视图添加到 subclass.nib被忽略了。
【解决方案2】:

我使用@Anna 的建议在viewDidLoad 中添加视图,但您不需要使用第二个 Xib 或在代码中设计视图。 你需要的是:

A.在 storyboard/xib 文件中的 JSQMessagesViewController 场景中设计您的视图。

B.创建您需要呈现的视图的出口。

C.在viewDidLoad 中添加您的视图view.addSubview(myView)(或[self.view addSubview:self.myView] 用于所有的objc)

D.就是这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多