从深层嵌套的UIControl向View Controller发送消息的最佳方法?

时间:2011-06-06 03:20:33

标签: iphone ios ios4 uiviewcontroller

我的应用程序中有以下结构:

Custom View Controller
 +- Custom View 1
   +- Custom View 2
     +- A number of UIControls

如果用户点击其中一个UIControl,我想向自定义视图控制器发送消息。

目前,我可以看到两种解决方案:

  1. 告诉第一个关于控制器的自定义视图,然后告诉第二个自定义视图,并在创建'UIControl'时设置目标和操作。 (我的自定义视图可能有-initWithFrame:controller:方法或其他东西)
  2. UIControl可以发送我的控制器观察到的NSNotification(可能包含一些userInfo)。
  3. 我倾向于选项2因为我不喜欢告诉Custom View 1关于我的控制器,所以它可以告诉Custom View 2它。

    我的两种解决方案的优缺点是什么,还是有另一种方法可以做到这一点?

    更新:我暂时使用NSNotification

2 个答案:

答案 0 :(得分:1)

如何从应用代理中保留指向自定义视图控制器的指针,并将其作为属性公开。

然后,您可以使用UIApplication上的静态sharedApplication消息来访问您的应用委托和相应的属性:

// in custom view 2 code ...
YourApplication * app = (YourApplication*)[UIApplication sharedApplication];
CustomViewController * cvc = app.customViewController;

答案 1 :(得分:1)

有几种可能性,但最好的可能性取决于您的特定业务案例,以及多个嵌套UIView子类的用途。

  1. 为控件的tag属性赋值,然后在设置目标操作事件时,使用viewWithTag:从视图控制器访问它。
  2. 为每个子视图的每个UIView子类提供公共访问器,然后使用这些属性从视图控制器访问该控件。
  3. 使用响应者链。在设置控件的目标操作时指定一个nil目标,如果实现该操作,该操作最终将发送给视图控制器。
  4. 根据UIView子类的性质,通过视图的委托协议实现对视图控制器的任何必要回调可能更好。因此控件的目标操作将由包含UIView子类分配给它自己,并且在它的处理程序中它将调用它自己的委托方法。