1

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

现在的问题是,当用户单击状态视图上显示的导航栏左侧的后退/行星详细信息按钮并返回行星详细信息视图时,仍会显示添加/删除(以之前显示的为准)按钮,而它现在应该根据我编写的代码删除/添加(根据先前加载的按钮)。

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

还是有其他可能的解决方案?

这让用户非常困惑,因为他认为他刚刚删除/添加了书签,但按钮仍在要求他添加/删除......

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

4

3 回答 3

5

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

于 2009-05-09T08:27:35.417 回答
0

我找到了一个解决方案:此类代码(在 popViewController 或此类事件之后更改按钮)应编写在 viewWillApear 中,以使其在每次加载视图时都运行,无论如何。

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

于 2009-05-09T08:46:10.287 回答
0

设置代表正确和

- (void)navigationController:(UINavigationController *)navigationController
                 willShowViewController:(UIViewController *)viewController
                 animated:(BOOL)animated
{
    NSLog(@"navigationController willShowViewController");
}
于 2009-09-03T19:09:41.900 回答