我有一个高级控制器类,负责管理多个类和驱动状态机。
状态逻辑的一部分涉及到两个不同屏幕的临时显示,每个屏幕都有一个专用的视图控制器,高级控制器创建这些其他控制器类,并在必要时将其显示为模态视图控制器。
但是,这些视图控制器中的一个非常简单,它具有一个按钮和一些文本,这些文本可以随着状态的进行而改变。高级控制器是一种类,它知道在什么阶段显示什么文本,还需要知道何时按下按钮。
因此,视图控制器将需要提供一个API,高级控制器可以调用该API来设置文本,并且高层控制器也需要成为视图控制器的委托,以便可以在按下按钮时将其调回。
这似乎是不必要的管道,我想将其删除。
因此,我可以将视图控制器中的插座和动作移到高级控制器中,因此不需要此管道。但是,视图控制器中什么也没有剩下(它是从笔尖实例化的)。所以我想完全摆脱它。
然后,一旦它消失了,我打算在高级控制器中使用它:
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"TheNib" bundle:nil];
or should it be:
UIViewController *vc = [[UIViewController alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"TheNib" owner:vc options:nil];
[[UIApplication sharedApplication].delegate.window.rootViewController presentViewController: self.vc animated: NO completion:nil];
但是,应该如何设置IB才能实现这一目标-具体来说
a)文件的所有者应设置为什么?
b)IB中的视图可以设置为什么?
请注意,高级控制器已经从另一个类继承,因此我无法从UIViewController派生它,因此它不具有可连接到IB中的视图的view属性。
有没有简单的方法可以将xib内容连接到在高级视图控制器中创建的UIViewController?
最佳答案
视图及其控制器是“模块化的元素”,因此,如果视图具有按钮,则视图的控制器(而不是父视图)应该是按钮的目标。视图的控制器认为父母/其他人会对按钮事件感兴趣,因此应该定义父母/其他人可以参与的委托接口或通知接口。
在您的情况下,通过“删除不必要的管道”,您是:1)脱离了“模块化元素”,并且2)造成困难,导致您提出与拆除管道有关的问题。
最好只是使用标准模式。
关于ios - 如何使高级 Controller 加载 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10956040/