0

我意识到这个问题已经被问死了,在过去的几年里,至少每个月在 stackoverflow 上问一次,但我仍然找不到解决方案。

我有两个来自 UITabBarController 的 ViewController。两者都通过情节提要进行初始化。我正在尝试从另一个调用一个 VC 的方法。当然是实例方法。

在此处输入图像描述

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

1: NSNotifications

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

3:实际上是通过RootViewController调用方法。

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

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

(2) 或 (3) 都可能吗?怎么会这样?

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

4

2 回答 2

1

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

BarViewController,做[(FooViewController *)[self.tabBarController.viewControllers objectAtIndex:0] doFoo]

于 2012-12-21T07:51:54.147 回答
0

我想使用 NSNOtification 并不总是做类似事情的错误方法。我也为这个概念而奋斗。

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

  1. 你有一个包含控制器 A 和 B 的 tabbarcontroller
  2. 控制器 A 是一些对象的列表,例如书籍。
  3. 控制器 B 是您通过填写表格并单击提交来创建书籍的控制器
  4. 控制器 A 然后更新其列表。

原因是Controller A的更新不是“点击提交”。它刷新是因为创建了一本书。这是关于数据的东西。不知何故,“一本书被创建”是应用程序中的一个关键事件。

对于另一个 senario,这是不行的

  1. 你有一个包含控制器 A 和 B 的 tabbarcontroller
  2. 控制器 A 在中心有一个 ViewC
  3. 控制器B有一个按钮,当它被点击时,ViewC向上移动

这只是我自己的意见。

于 2012-12-21T08:24:59.030 回答