从uinavigationbar单击后退按钮时重新加载视图

时间:2009-05-09 08:15:29

标签: iphone objective-c uiviewcontroller uinavigationbar

应用程序显示有关行星,它们的卫星等的信息。它显示了一个行星列表,让用户选择行星并查看其详细信息,然后将其标记/取消标记。我有一个视图,向用户显示所选行星的详细信息,它还包含一个添加/删除书签按钮。如果用户单击该按钮,则添加/删除该书签,并在当前视图的顶部推送另一个视图,以告知用户书签已被删除。

现在的问题是当用户点击状态视图中显示的导航栏左侧的后退/行星详细信息按钮并返回行星详细信息视图时,他仍然显示添加/删除(以前显示的那个)按钮,现在它应该根据我写的代码删除/添加(根据以前加载的按钮)。

我能理解的是,当用户点击该返回按钮时,不会重新加载上一个视图,只会弹出状态视图。当用户点击状态视图上的后退按钮时,有没有办法让app运行setNeedsDisplay或者可以重新加载书签详细信息viewDidLoad代码?

或者是否有另一种解决方案?

对用户来说非常困惑,因为他认为他刚删除/添加了书签,但按钮仍然要求他添加/删除......

代码的其他部分也使用该状态视图向操作的用户显示结果,因此我无法更改其代码,或者可能是我可以检查其中的上一个视图,检查它是否是行星细节,然后重新加载其内容......

3 个答案:

答案 0 :(得分:5)

获取在viewDidLoad方法中设置按钮的代码,并将其移动到viewWillAppear中。重新进入视图时,它应该正确更新按钮。

答案 1 :(得分:0)

我找到了一个解决方案: 应该在viewWillApear中编写这样的代码(在popViewController或此类事件之后更改按钮),以便无论何时加载视图,都可以运行它。

感谢Quentarez和irc.freenode.net上的#iphonedev上的crackity_jones。

答案 2 :(得分:0)

设置委托是正确的

- (void)navigationController:(UINavigationController *)navigationController
                 willShowViewController:(UIViewController *)viewController
                 animated:(BOOL)animated
{
    NSLog(@"navigationController willShowViewController");
}