简单地说:
Interface Builder允许您将故事板中的某个基于UIViewController的类分配给自定义视图控制器,并通过将任何ID指定为storyboardID来识别它。
调用UIStoryBoard的instantiateViewControllerWithIdentifier将实例化它并返回实例化视图控制器的id,到目前为止,非常好。不,这是挑战:
我的Storyboard布局非常复杂,我想从不同的基于UIViewController的类中使用它。一种简单的方法是简单地复制场景,并分配不同的类和ID。然而,这会炸毁故事板,如果几个控制器使用相同的布局,则会产生额外的开销。
所以我想到了一个方法,用一个编程定义的类来实例化一个视图控制器(取决于App的状态),我没有找到任何可行的方法。我想到了一些简单的事情:
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:viewIdentifier usingClass:aClass];
有什么想法吗?
答案 0 :(得分:0)
好的,我太专注于UIStoryboard / NIB问题了。找到它之后,答案非常简单。只是在基类中ovewrride awakeFromNib并设置一个新类(当然,它必须基于基类而不是定义任何其他内容)。
- (void) awakeFromNib
{
Class aNewClass = /* whatever's needed to find the correct class ... */
object_setClass(self, aNewClass);
}
就是这样。 instantiateViewControllerWithIdentifier将返回新类。