从另一个ViewController调用一个ViewController的实例方法

时间:2012-12-21 07:45:36

标签: objective-c ios uiviewcontroller delegates

我意识到这个问题已被要求死亡,至少每月一次在stackoverflow上过去几年,但我仍然无法找到解决方案。

我有两个源自UITabBarController的ViewControllers。两者都通过故事板初始化。我试图从另一个VC调用一个VC的方法。当然是实例方法。

enter image description here

我听说过以下几种可能性:

1: NSNotifications

2:定义协议并将一个VC声明为另一个VC的委托。

3:实际上通过RootViewController以某种方式调用该方法。

我有通过NSNotifications工作的代码,但我不喜欢这个概念,我想了解正确的方法。我最感兴趣的是可能性(3),然后(2)作为最后的手段。

我试图让(2)工作几个小时,但是没有从另一个VC初始化委托VC,我很难过。 (由于故事板,不是一个选项)。

是(2)还是(3)可能吗?怎么样?

如果两者都不可能,我对首选iOS架构的误解是什么?

2 个答案:

答案 0 :(得分:1)

是的,3是可能的。假设您有两个UIViewController类,FooViewController(标签索引0)和BarViewController(标签索引1)。我们假设您要从FooViewController调用-(void)doFoo的{​​{1}}方法。

BarViewController中,执行BarViewController

答案 1 :(得分:0)

我认为使用NSNOtification并不总是做出类似事情的错误方法。我也为这个概念而努力。

对于这个Senario,我认为通知是可以的:

  1. 你有一个包含控制器A和B的tabbarcontroller
  2. 控制器A是一些对象的列表,比如书籍。
  3. 控制器B是您通过填写表格创建图书并单击提交
  4. 的控制器
  5. 控制器A然后更新其列表。
  6. 原因是,控制器A的更新不是由于“点击提交”。它会刷新,因为创建了Book。这是关于数据的东西。某种程度上“创建一本书”是应用程序中的一个关键事件。

    对于另一个Senario,它是不行的

    1. 你有一个包含控制器A和B的tabbarcontroller
    2. 控制器A在中心有一个ViewC
    3. 控制器B有一个按钮,当它被点击时,ViewC向上移动
    4. 这只是我自己的看法。