instantiateViewControllerWithIdentifier 上的自定义 UIViewController

Posted

技术标签:

【中文标题】instantiateViewControllerWithIdentifier 上的自定义 UIViewController【英文标题】:Custom UIViewController on instantiateViewControllerWithIdentifier 【发布时间】:2014-11-28 16:09:11 【问题描述】:

简单地说:

Interface Builder 允许您将故事板中基于 UIViewController 的某个类分配给自定义视图控制器,并通过将任何 ID 指定为 storyboardID 来识别它。

调用 UIStoryBoard 的 instantiateViewControllerWithIdentifier 会对其进行实例化,并返回实例化的视图控制器的 id,到目前为止,一切顺利。不,这是挑战:

我的 Storyboard 布局非常复杂,我想从不同的基于 UIViewController 的类中使用它。一个简单的方法是简单地复制场景,并分配不同的类和 ID。但是,这会破坏情节提要,并且如果多个控制器使用相同的布局,则会增加额外的开销。

所以我想到了一种方法,用程序定义的类(取决于应用程序的状态)实例化视图控制器,但我没有找到任何可行的方法。我想到了一些简单的事情,例如:

UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:viewIdentifier usingClass:aClass];

有什么想法吗?

【问题讨论】:

【参考方案1】:

好的,我太专注于 UIStoryboard/NIB 问题。找到之后,答案很简单。只需在基类中overwrride awakeFromNib 并设置一个新类(自然必须基于基类而不定义任何附加内容)。

- (void) awakeFromNib

    Class aNewClass = /* whatever's needed to find the correct class ... */
    object_setClass(self, aNewClass);

就是这样。 instantiateViewControllerWithIdentifier 将已经返回新类。

【讨论】:

啊,别忘了:#import

以上是关于instantiateViewControllerWithIdentifier 上的自定义 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

Swift:prepareForSegue 和 instantiateViewController 之间的区别

动态呈现 ViewController

导航项未添加

无法关闭 Popover UITableViewController

视图的奇怪行为

幽灵视图控制器