2011-12-20 158 views
0

我有tabbar - 每个都带有导航控制器的两个选项卡。在第二张卡上我更改了数据库,所以我需要在第一张卡上刷新数据(我知道viewWillAppear)。但有导航控制器,我可以在它的下一个视图。如何从其他选项卡推入tabbar中的其他视图?

(可惜的是,我有导航栏,连接静态的TabBar - 通过的.xib)

我怎样才能返回到第一视图在导航控制器第一突片(从第二标签)上?或者我可以如何推动其他观点,但不要打破导航控制器?

回答

1

你需要在你的第一个标签栏根弹出导航控制器,[firstTabBarViewController.navigationController popToRootViewControllerAnimated:NO];

与此唯一的问题是,你需要有你的第一个标签视图控制器的参考。

另一种方式,你可以做到这一点(我之前已经用这种方法)是使用本地通知。

在你的第一个视图控制器viewDidLoad方法中添加以下行来的注册通知,您可以命名通知任何你喜欢的也许像DatabaseChangedNotification。

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

然后添加称为databaseHasChanged一个新的(无效)方法,该方法将被通知升高每次调用。你databaseHasChanged方法应该是这个样子:

-(void)databaseHasChanged 
{ 
    [self.navigationController popToRootViewControllerAnimated:NO]; 
} 
在dealloc方法

然后确保你使用下面的代码注销通知:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

上面的代码将设置你的第一个视图控制器倾听和处理DatabaseChangedNotification。

现在,您只需向第二个视图控制器添加一些代码即可更改数据库。数据库已更改后使用下面的代码只是火DatabaseChangedNotification:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseChangedNotification" 
                object:nil]; 
+0

感谢它的完美 – user968991 2011-12-20 13:29:57

1

在你的第一个标签页的viewWillAppear中你要弹出到根视图 - 控制:

[self.navigationController popToRootViewControllerAnimated:YES]; 

你不能从你的第二个选项卡中做到这一点。然而,你可以在某个地方设置一个标志,例如在nsuserdefaults或数据库中以及viewWillAppear中(在第一个标签中),请检查此标志以查看是否需要弹出到根视图控制器。

+0

谢谢,我通知用它,但与版本NSUserDefaults的ASLO的伟大工程。 – user968991 2011-12-20 13:31:29

相关问题