我有tabbar - 每个都带有导航控制器的两个选项卡。在第二张卡上我更改了数据库,所以我需要在第一张卡上刷新数据(我知道viewWillAppear)。但有导航控制器,我可以在它的下一个视图。如何从其他选项卡推入tabbar中的其他视图?
(可惜的是,我有导航栏,连接静态的TabBar - 通过的.xib)
我怎样才能返回到第一视图在导航控制器第一突片(从第二标签)上?或者我可以如何推动其他观点,但不要打破导航控制器?
我有tabbar - 每个都带有导航控制器的两个选项卡。在第二张卡上我更改了数据库,所以我需要在第一张卡上刷新数据(我知道viewWillAppear)。但有导航控制器,我可以在它的下一个视图。如何从其他选项卡推入tabbar中的其他视图?
(可惜的是,我有导航栏,连接静态的TabBar - 通过的.xib)
我怎样才能返回到第一视图在导航控制器第一突片(从第二标签)上?或者我可以如何推动其他观点,但不要打破导航控制器?
你需要在你的第一个标签栏根弹出导航控制器,[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];
在你的第一个标签页的viewWillAppear中你要弹出到根视图 - 控制:
[self.navigationController popToRootViewControllerAnimated:YES];
你不能从你的第二个选项卡中做到这一点。然而,你可以在某个地方设置一个标志,例如在nsuserdefaults或数据库中以及viewWillAppear中(在第一个标签中),请检查此标志以查看是否需要弹出到根视图控制器。
谢谢,我通知用它,但与版本NSUserDefaults的ASLO的伟大工程。 – user968991 2011-12-20 13:31:29
感谢它的完美 – user968991 2011-12-20 13:29:57