【发布时间】:2010-05-03 17:40:55
【问题描述】:
所以我有一个 iPhone 应用程序,它利用 UINavigationController 来设置视图。当应用程序第一次启动时,它会向用户显示一个 UITableViewController,用户可以选择一个项目,然后它会推送另一个视图。现在我设置了它,以便我的应用程序记住用户的最后选择并自动选择它并加载正确的视图控制器。唯一的问题是,当我自动加载下一个视图时,我遇到了一个非常奇怪的故障..
当视图被按下时,导航工具栏将发生变化,以便显示指向上一个视图的后退按钮,但不会显示下一个视图。相反,它将继续显示表格视图,我也可以与之交互。我可以按后退按钮,它会将工具栏改回来,并且仍然显示表格视图。然后当我选择一个项目时,它会很好地加载视图。
感谢您的帮助。
代码:
我根据是否可以连接到服务器来决定是否推送视图控制器。我在后台线程中执行此操作:
- (void)startingThread
{
[NSThread detachNewThreadSelector:@selector(loginThread:) toTarget:self withObject:communicator];
}
- (void)loginThread:(MowerCommunicator *)communicator
{
//If it can connect, launch thread complete.
[self performSelectorOnMainThread:@selector(loginThreadComplete:) withObject:communicator waitUntilDone:NO];
}
- (void)loginThreadComplete:(MowerCommunicator *)communicator
{
//push view controller
}
现在我添加了 NSLog 语句来跟踪视图是否真正“显示”并且 viewWillAppear 和 viewDidAppear 都被调用。我还检查了导航控制器的委托方法,它们也被调用了。
我有一个视图,它是初始启动视图,它从服务器读取以确定在下一个表视图中显示的内容。这被推得很好,当 tableview 被推时,我隐藏了后退按钮,这样用户就无法在不关闭应用程序的情况下返回第一个视图。然后 tableview 查看 NSUserDefaults 中的变量以确定是否存在已保存的索引,然后推送下一个视图控制器。这就是故障发生的时候。如果我然后按下后退按钮“返回”到表格视图(这实际上只是更改了导航工具栏),然后我从表格视图中选择了一个项目,它会正确加载下一个视图。此外,当用户从表格视图中按下项目以及应用程序自动加载视图时,我会调用完全相同的方法。
【问题讨论】:
-
请发布一些代码(可能是您的应用委托)。
标签: iphone uinavigationcontroller toolbar uinavigationbar push