Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将代理设置为另一个ViewController?_Iphone_Ios_Delegates_Uiviewcontroller_Tabbar - Fatal编程技术网

Iphone 如何将代理设置为另一个ViewController?

Iphone 如何将代理设置为另一个ViewController?,iphone,ios,delegates,uiviewcontroller,tabbar,Iphone,Ios,Delegates,Uiviewcontroller,Tabbar,我最近开始为iPhone开发,到目前为止,我做得很好,但有一个基本模式我似乎真的不明白 比如说,我有一个带有两个视图的选项卡栏和一个自定义委托协议,因此我的结构如下: AppDelegate.h/.m myDelegateProtocol.h FirstViewController.h/.m SecondViewController.h/.m MainView.xib FirstView.xib SecondView.xib 现在我想实现以下目标:我在FirstView.xib中放置了一个按

我最近开始为iPhone开发,到目前为止,我做得很好,但有一个基本模式我似乎真的不明白

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

  • AppDelegate.h/.m
  • myDelegateProtocol.h
  • FirstViewController.h/.m
  • SecondViewController.h/.m
  • MainView.xib
  • FirstView.xib
  • SecondView.xib
现在我想实现以下目标:我在FirstView.xib中放置了一个按钮,我希望它调用的iAction(在FirstViewController ofc内)向SecondViewController([self.delegate tellSecondViewContrToSayHi])发送一条消息,并调用另一个方法,该方法只需在控制台中打印一个日志,说“嗨,我在这里”

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

  • 指定协议
  • 在SecondViewController中实现该协议
  • 在我的FirstViewController中创建一个id委托,…最后但并非最不重要的是:
  • 设置self.delegate=secondViewControllerObject
  • 现在,nr.4就是问题所在。究竟如何将代理链接到另一个viewController?我的意思是,我不是像tabBar那样实例化视图的人,。。。有什么建议吗?还是我太累了,以至于没有注意到我在某处做了一件非常愚蠢的事情

    理论上,同样的问题也适用于目标:行动:事物,。。。我是说,我该如何定义目标

    非常感谢,
    wasabi

    您的想法是正确的,假设您希望通过代理协议在这些控制器之间实现相对紧密的耦合

    因为在设置委托属性之前,两个控制器都不知道另一个控制器,所以您需要有一个对象,该对象对它们都有引用,从而连接该关系。在您的情况下,这可能是应用程序委托,它可以创建两个控制器,将一个设置为另一个的委托,并将两者传递给选项卡栏控制器


    实际上,您可能希望让应用程序委托为两个控制器提供对某个共享模型对象的引用。单击按钮时,第一个ViewController可以更新该模型,第二个ViewController可以观察对模型的更改以更新其显示(或根据当前模型状态仅更新其显示时的视图)。这样,您的控制器就不需要了解彼此的任何情况。

    我很好奇您的设计是否合理。看起来你可能试图以一种有趣的方式使用委托。你是对的!这实际上在我的任何应用程序中都没有真正的应用程序,我只是好奇和玩弄,以便,嗯……弄清楚事情并理解机制:)看看这个,它有非常好的信息: