1

我有一个标签栏应用程序,其中有 2 个标签(2 个视图控制器)。我需要将通知从选项卡 2(视图控制器 2)发布到选项卡 1(视图控制器 1)。但问题是我必须首先转到选项卡 1(视图控制器 1)才能注册通知,如果我不这样做,则通知永远不会注册。似乎只有在我选择视图后才分配视图,然后移动到选项卡 2(视图控制器 2)以发布通知。

在 viewDidLoad 和 viewWillAppear 中注册通知,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil];

那么,如何避免先选择选项卡 1(视图控制器 1)然后从选项卡 2(视图控制器 2)发布通知?

谢谢!!

4

2 回答 2

0

如果您在 appDelegate 中的选项卡中有视图控制器的实例,您可以在 applicationDidFinishLaunching 中尝试类似的操作

[[NSNotificationCenter defaultCenter] addObserver:tab1viewcontroller selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil];

或者这样做,同时将视图控制器添加到 UITabBarController

ViewController *vc=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
[[NSNotificationCenter defaultCenter] addObserver:vc selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil];
于 2013-05-03T07:33:39.777 回答
0

如果您想在视图加载(viewDidLoad、viewDidAppear)之前注册通知,我建议您在视图控制器初始化时注册(initWithNibName、init 等),这样您就可以确保您的 vc 实例会收到通知。

否则,有一些技巧可以强制您的控制器加载视图,如下所示:

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];  
[vc view]; // force view load

然后只需将其插入您的导航控制器。这样您就不必切换到第一个选项卡来加载视图。

于 2013-05-03T08:32:25.763 回答