iOS:从另一个类访问情节提要选项卡栏ViewController

iOS:从另一个类访问情节提要选项卡栏ViewController,ios,storyboard,viewcontroller,Ios,Storyboard,Viewcontroller,我有以下问题: 我创建了一个iOS5SDK应用程序,其中包含一个TabBar和三个ViewController。 从另一个类(Receiver.m)中,我想访问例如ThirdViewController.m上的UI标签,它是选项卡栏的电子视图控制器之一 在第三台控制器里,我得到了 @interface ThirdViewController : UIViewController { } @property (weak, nonatomic) IBOutlet UILabel *textlabel

我有以下问题: 我创建了一个iOS5SDK应用程序,其中包含一个TabBar和三个ViewController。 从另一个类(Receiver.m)中,我想访问例如ThirdViewController.m上的UI标签,它是选项卡栏的电子视图控制器之一

在第三台控制器里,我得到了

@interface ThirdViewController : UIViewController {
}
@property (weak, nonatomic) IBOutlet UILabel *textlabel1;
@end
在第三个IEWController.h中:

@implementation ThirdViewController
@synthesize textlabel1;
...
这似乎没问题,因为我可以在ThirdViewController实例中设置标签属性。 现在,要从Receiver.m中获取访问权限,请使用:

   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
   ThirdViewController *myVC = [storyboard instantiateViewControllerWithIdentifier:@"ThirdViewController"];
   myVC.textlabel1.text = @"Hello"; 
这是行不通的。我不想创建ThirdViewController的新实例,而是访问现有实例以仅更新UILabel。Project Navigator中的我的故事板默认名称为MainStoryboard.Storyboard。 获取第三个DVIEWController类实例是否有问题

错误显示:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'Storyboard (<UIStoryboard: 0x190590>) doesn't contain a view controller with 
identifier 'ThirdViewController''
***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:
“序列图像板()不包含具有
标识符“ThirdViewController”

谢谢

序列图像板不能让您访问已经呈现的视图控制器版本-正如您所发现的,您正在使用的方法会创建一个新实例


如果希望外部对象更新属于视图控制器的特定标签,我会质疑代码的结构。这不是一种典型的设计模式,因为它使两个对象之间存在紧密的依赖关系。通常,您会将视图控制器设置为接收者对象的委托(如果它是由该视图控制器创建的),或者您的接收者对象会发送第三个视图控制器正在侦听的通知

我有一段时间没有注意到这个帖子,但是对于那些对它的工作方式感兴趣的人,我会发布这个帖子,尽管我不会在我的代码中使用它(感谢上面@jrturton的评论)

因此,我会将jrturton的答案标记为已接受。

答案对我不起作用。这起到了作用:

let tabBarViewController = UIApplication.shared.windows.first!.rootViewController as!   UITabBarController
更安全的选择:

if let tabBarViewController = UIApplication.shared.windows.first?.rootViewController as? UITabBarController {
    // access your tab bar controller here.
}

Swift 3、Xcode 8、iOS 10

好吧,这就是我担心的。那么,是否有其他方法(我发现类似AppDelegate.window.ThirdViewController的东西也不起作用)以某种方式在ViewController“层次结构”上获取ThirdViewController实例?感谢您的推荐,我知道这不是一个好的样式,代码会更改,但由于缺少应用程序逻辑,我正试图通过这种方式直接访问ViewController。您必须获得选项卡栏控制器(app delegate.window的根视图控制器)然后从选项卡栏控制器的ViewController数组中获取第三个视图控制器。
AppDelegate.window.UINavigationController.ThirdViewController
无法获取该视图控制器。以前有没有人这样做过,并且愿意分享一些代码片段?我将不胜感激。否则我将不得不更改一些代码的结构。它更像
[appdelegate.window.rootViewController.viewcontrollers objectAtIndex:2]
,但您可能需要一些强制转换来防止编译器错误。但是,这是错误的方法,您应该按照我在回答中的建议使用委托或通知。
if let tabBarViewController = UIApplication.shared.windows.first?.rootViewController as? UITabBarController {
    // access your tab bar controller here.
}