应用程序显示有关行星,它们的卫星等的信息。它显示了一个行星列表,让用户选择行星并查看其详细信息,然后将其标记/取消标记。我有一个视图,向用户显示所选行星的详细信息,它还包含一个添加/删除书签按钮。如果用户单击该按钮,则添加/删除该书签,并在当前视图的顶部推送另一个视图,以告知用户书签已被删除。
现在的问题是当用户点击状态视图中显示的导航栏左侧的后退/行星详细信息按钮并返回行星详细信息视图时,他仍然显示添加/删除(以前显示的那个)按钮,现在它应该根据我写的代码删除/添加(根据以前加载的按钮)。
我能理解的是,当用户点击该返回按钮时,不会重新加载上一个视图,只会弹出状态视图。当用户点击状态视图上的后退按钮时,有没有办法让app运行setNeedsDisplay或者可以重新加载书签详细信息viewDidLoad代码?
或者是否有另一种解决方案?
对用户来说非常困惑,因为他认为他刚删除/添加了书签,但按钮仍然要求他添加/删除......
代码的其他部分也使用该状态视图向操作的用户显示结果,因此我无法更改其代码,或者可能是我可以检查其中的上一个视图,检查它是否是行星细节,然后重新加载其内容......
答案 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");
}