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 之间的区别