【问题标题】:Calling instance method of one ViewController from another ViewController从另一个 ViewController 调用一个 ViewController 的实例方法
【发布时间】:2012-12-21 07:45:35
【问题描述】:

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

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

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

1: NSNotifications

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

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

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

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

(2)或(3)是否可能?怎么样?

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

【问题讨论】:

    标签: objective-c ios uiviewcontroller delegates


    【解决方案1】:

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

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

    【讨论】:

    • 啊好吧,几乎可以了。万分感谢!我忘了提到 FooViewController 隐藏在 UINavigationController 后面。对不起,我忘了把它放在我原来的帖子里。您能否根据这种情况编辑代码? image.bayimg.com/4877ae4d46dbdae21701f4648b51fcbe08e14c76.jpg(故事板屏幕截图)
    • 我将把它作为练习留给读者 =) 提示:[self.tabBarController.viewControllers objectAtIndex:0].viewControllers 将为您提供UINavigationController 中的 VC 数组。
    • hm...它的抱怨:当我尝试 NSLog 数组时,在“id”类型的对象上找不到属性“viewControllers”...
    • 所以我重新初始化了导航控制器...让我们看看会发生什么: UINavigationController *navController = [self.tabBarController.viewControllers objectAtIndex:0]; [(homeViewController *) [navController.viewControllers objectAtIndex:0] updateLabelsToMetric:metricSwitch.on];
    【解决方案2】:

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

    对于这个场景,我认为通知还可以:

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

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

    换一个senario就不行了

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

    这只是我个人的看法。

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 2012-10-03
      • 1970-01-01
      • 2016-05-06
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      相关资源
      最近更新 更多