Objective c 从另一个ViewController调用一个ViewController的实例方法
我意识到这个问题在过去的几年里每月至少有一次在stackoverflow上被问到,但我仍然找不到解决办法 我有两个来自UITabBarController的ViewController。两者都是通过故事板初始化的。我试图从一个VC调用另一个VC的方法。当然是实例方法 我听说有以下几种可能性: 1: 2:定义协议并将一个VC声明为另一个VC的代理 3:实际上是通过RootViewController以某种方式调用该方法 我有通过NSNotifications工作的代码,但我不喜欢这个概念,我想了解正确的方法。我最感兴趣的是作为最后手段的可能性(3),然后(2) 我试图让(2)工作几个小时,但没有初始化来自另一个VC的代理VC,我被难倒了。(由于故事板的原因,这不是一个选项) 有(2)或(3)种可能吗?怎么会这样?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工作的代码,但我不喜欢这个概念,我想了
如果两者都不可能,我对首选iOS体系结构的误解是什么?是的,3是可能的。假设您有两个
UIViewController
类,FooViewController
(选项卡索引0)和BarViewController
(选项卡索引1)。假设您想从BarViewController
调用FooViewController
的-(void)doFoo
方法
在
BarViewController
中,执行[(FooViewController*)[self.tabBarController.viewControllers objectAtIndex:0]doFoo]
我想使用NSNOtification做类似事情并不总是错误的。我也为这个概念而奋斗
对于这个senario,我认为通知是可以的:
这只是我自己的意见 啊,好的,差不多可以了。非常感谢!我忘了提到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];