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

Objective c 从另一个ViewController调用一个ViewController的实例方法,objective-c,ios,uiviewcontroller,delegates,Objective C,Ios,Uiviewcontroller,Delegates,我意识到这个问题在过去的几年里每月至少有一次在stackoverflow上被问到,但我仍然找不到解决办法 我有两个来自UITabBarController的ViewController。两者都是通过故事板初始化的。我试图从一个VC调用另一个VC的方法。当然是实例方法 我听说有以下几种可能性: 1: 2:定义协议并将一个VC声明为另一个VC的代理 3:实际上是通过RootViewController以某种方式调用该方法 我有通过NSNotifications工作的代码,但我不喜欢这个概念,我想了

我意识到这个问题在过去的几年里每月至少有一次在stackoverflow上被问到,但我仍然找不到解决办法

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

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

1:

2:定义协议并将一个VC声明为另一个VC的代理

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

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

我试图让(2)工作几个小时,但没有初始化来自另一个VC的代理VC,我被难倒了。(由于故事板的原因,这不是一个选项)

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


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

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


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

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

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

  • 您有一个包含控制器a和B的tabbarcontroller
  • 控制器A是一些对象的列表,例如书籍
  • 控制器B是您通过填写表单并单击提交来创建书本的控制器
  • 控制器A然后更新其列表
  • 原因是,控制器A的更新不是由于“点击提交”。它会刷新,因为创建了一本书。这是关于数据的东西。不知何故,“一本书被创造”是一个应用程序中的关键事件

    对于另一个塞纳里奥来说,这是不好的

  • 您有一个包含控制器a和B的tabbarcontroller
  • 控制器A的中央有一个ViewC
  • 控制器B有一个按钮,单击该按钮时,ViewC向上移动

  • 这只是我自己的意见

    啊,好的,差不多可以了。非常感谢!我忘了提到FooViewController隐藏在UINavigationController后面。对不起,我忘了把它放在我原来的帖子里。你能按照那个场景编辑代码吗?(故事板屏幕截图)我将把它作为练习留给读者=)提示:
    [self.tabBarController.viewControllers objectAtIndex:0]。viewControllers
    将为您提供
    UINavigationController
    中的VCs数组。嗯。。。它的抱怨是:当我尝试记录数组时,在类型为“id”的对象上找不到属性“viewControllers”…所以我重新初始化了导航控制器。。。让我们看看会发生什么:UINavigationController*navController=[self.tabBarController.viewControllers objectAtIndex:0];[(homeViewController*)[navController.ViewController对象索引:0]updateLabelsToMetric:metricSwitch.on];