0

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

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

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

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

4

3 回答 3

1

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

在此处输入图像描述

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

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

于 2012-06-08T21:39:20.990 回答
1

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

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

最好只使用标准模式。

于 2012-06-08T21:39:29.590 回答
0

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

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

于 2012-06-08T21:47:56.350 回答