【问题标题】:How to make a high level controller load a view controller如何使高级控制器加载视图控制器
【发布时间】:2012-06-09 05:47:56
【问题描述】:

我有一个高级控制器类,负责管理多个类并驱动状态机。

部分状态逻辑涉及几个不同屏幕的临时显示,每个屏幕都有一个专用的视图控制器,高级控制器创建这些其他控制器类,并在必要时将它们呈现为模态视图控制器。

然而,其中一个视图控制器非常简单,它有一个按钮和一些文本,这些文本可以随着状态的进展而改变。高级控制器是知道在什么阶段显示什么文本并且需要知道按钮何时被按下的类。

因此,视图控制器需要提供一个 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 中的视图。

有没有一种简单的方法可以将 xib 内容连接到在高级视图控制器中创建的 UIViewController?

【问题讨论】:

    标签: ios


    【解决方案1】:

    视图及其控制器是“模块化元素”因此,如果视图有一个按钮,那么视图的控制器,而不是父级,应该是按钮的目标。视图的控制器,认为父母/其他人会对按钮事件感兴趣,应该定义父母/其他人可以参与的委托接口或通知接口。

    在您的情况下,通过“移除不必要的管道”,您 1) 远离了“模块化元素”,以及 2) 造成困难,导致您提出与移除管道相关的问题。

    最好只使用标准模式。

    【讨论】:

      【解决方案2】:

      您可以尝试更改文件所有者或将类对象添加到您的 NIB...

      只需将“对象”拖到对象列表中并设置正确的类。然后,您可以使用连接到此对象的 IBactions。

      也许我提出(并回答)的这个问题可以帮助你:Coordinating Controller design pattern in Cocoa Touch

      【讨论】:

      • 嗯,当我单击连接到高级控制器中的插座的按钮时出现异常,如果我将按钮连接到视图控制器中的插座,一切正常,切换它返回到高级视图控制器中的插座,异常返回:-[TileLayer RegisterButtonPressed:]: unrecognized selector sent to instance 0x1ae080'
      • 我遇到了完全相同的问题......一个没有任何解释的例外......检查我在自己的帖子中给出的答案(Coordinating Controller design pattern in Cocoa Touch),我展示了我为阻止这个错误所做的工作。老实说,我真的不知道出了什么问题,但我设法解决了它。
      【解决方案3】:

      如果您的视图所做的只是显示一些文本和一个按钮,为什么不将其替换为 UIAlertView?这是一个简单的控件,用于显示一些文本和一个或两个按钮,具有明确定义的界面,用于获取按下回哪个按钮。

      当然,这可能不适合您的设计,因为 UIAlertView 无法真正自定义,除非您使用第 3 方替代品(即http://cocoacontrols.com/platforms/ios/controls/tweetbot-like-uialertview-and-uiactionsheet-replacement)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 2019-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        相关资源
        最近更新 更多