如何将委托设置为另一个ViewController?

时间:2011-04-20 20:55:15

标签: iphone ios delegates uiviewcontroller tabbar

我最近开始为iPhone开发,到目前为止我的表现相当不错,但这种基本模式我似乎无法获得。

说,我有一个带有两个视图的TabBar和一个自定义委托协议,因此我的结构如下:

  • AppDelegate.h / .M
  • myDelegateProtocol.h
  • FirstViewController.h / .M
  • SecondViewController.h / .M
  • MainView.xib
  • FirstView.xib
  • SecondView.xib

现在我想实现以下目的:我在FirstView.xib中放置了一个按钮,我想要它调用的IBAction(在FirstViewController ofc。中)向SecondViewController发送消息([self.delegate tellSecondViewContrToSayHi] )并调用另一种方法,只需将日志打印到控制台,说“嗨,我在这里。”

到目前为止,我知道理论上需要做什么:

  1. 指定协议。
  2. 在SecondViewController中实现协议。
  3. 创建 id< myDelegateProtocol>委托在我的FirstViewController中,...并且最后但并非最不重要:
  4. 设置self.delegate = secondViewControllerObject。
  5. 现在,nr.4是问题的所在。我该如何将委托链接到另一个viewController?我的意思是我不是那个实例化视图的人,因为tabBar有点对我这样做,...任何建议?或者我是否太累了注意到我在某处做过一件非常愚蠢的事情?

    理论上同样的问题也适用于目标:行动:事物,......我的意思是,我如何定义目标?

    非常感谢, 芥末

1 个答案:

答案 0 :(得分:2)

您有正确的想法,假设您希望通过该委托协议在这些控制器之间进行相对紧密的耦合。

由于在设置了委托属性之前,两个控制器都不知道另一个控制器,因此你需要有一些引用它们的对象连接该关系。在您的情况下,可能是可以创建两个控制器的应用程序委托,将一个设置为另一个的委托,并将它们传递给标签栏控制器。

您可能真正想要的是让app delegate为两个控制器提供对某个共享模型对象的引用。当您点击按钮时,您的FirstViewController可以更新该模型,并且您的SecondViewController可以观察模型的更改以更新其显示(或者仅在基于当前模型状态显示时更新其视图)。这样你的控制器就不需要彼此了解任何事情了。