在基于导航的iPhone应用程序上隐藏后退按钮失败

时间:2010-11-04 04:06:37

标签: iphone button navigation hide back

我的问题是,如果我的网络请求在ViewWillAppear被解雇之前或之后不久完成,则后退按钮将无法恢复其可见性。

我有一个基于导航的iPhone 4.0应用程序,使用简单的Root和Detail视图设置。 我正在使用从Web服务返回的数据,所以当我在其ViewDidLoad函数中推送我的详细信息视图时,我在一个单独的线程中调用我的Web服务方法,而Iphone生命周期在主线程上执行它的操作。我必须禁用/隐藏后退按钮,直到Web请求完成(或失败),因此我在ViewDidLoad中调用self.navigationItem.hidesBackButton = YES;,在委托函数中调用self.navigationItem.hidesBackButton = NO;,一旦我的Web请求完成或失败,就会触发。< / p>

我已经尝试了以下内容:

[self.navigationItem performSelectorOnMainThread:@selector(setHidesBackButton:) withObject:NO waitUntilDone:NO];
[self.navigationItem setHidesBackButton:NO];
[self.view setNeedsDisplay];
[self.navigationController.view setNeedsDisplay];

UINavigationItem *nav = self.navigationItem;
nav.hidesBackButton = NO;

Root View Controller推送代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 ArticleViewController *articleViewController = [[ArticleViewController alloc] initWithNibName:@"ArticleViewController" bundle:nil];
 NewsArticle *newsArticle = [newsItems objectAtIndex:indexPath.row];
 articleViewController.articleID = newsArticle.newsID;
 [self.navigationController pushViewController:articleViewController animated:YES];

 [newsArticle release];
 [articleViewController release];
}

详细信息查看控制器代码:

- (void)viewDidLoad {
 [super viewDidLoad];

 self.navigationItem.hidesBackButton = YES;
 id scrollView = [[[self webContent] subviews] objectAtIndex:0];
 if([scrollView respondsToSelector:@selector(setBackgroundColor:)] )
 {
  [scrollView performSelector:@selector(setBackgroundColor:) 
       withObject:[UIColor blackColor]];
 }

 [self getNewsArticle];
}

//Fires when the web request has finished
- (void) finish:(NewsArticle *)newsArticleFromSvc {
 self.navigationItem.hidesBackButton = NO;
 self.newsArticle = newsArticleFromSvc;
 [self bindNewsArtice];
}

任何帮助都非常感谢我几乎无法@#$&amp; ^相信在UI中隐藏按钮可能会让我浪费时间。

2 个答案:

答案 0 :(得分:1)

尝试使用UINavigationItem的这种方法:

- (void)setHidesBackButton:(BOOL)hidesBackButton animated:(BOOL)animated

答案 1 :(得分:1)

我无法解决这个问题。相反,我调整了我的App Logic以隐藏他没有必要的按钮。