0

私の問題は、Web リクエストが発生する前または直後に終了しない場合、戻るボタンの表示が復元されないことViewWillAppearです。

シンプルなルート ビューと詳細ビューのセットアップを使用するナビゲーション ベースの iPhone 4.0 アプリケーションがあります。私は Web サービスから返されたデータを操作しているので、詳細ビューをそのViewDidLoad関数にプッシュすると、別のスレッドで Web サービス メソッドが呼び出され、Iphone ライフサイクルはメイン スレッドで処理されます。Web リクエストが終了する (または失敗する) まで [戻る] ボタンを無効化/非表示にする必要があるためself.navigationItem.hidesBackButton = YES;、ViewDidLoad とself.navigationItem.hidesBackButton = NO;、Web リクエストが終了または失敗したときに起動するデリゲート関数を呼び出します。

私はすでに次のことを試しました:

[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;

ルート ビュー コントローラーのプッシュ コード:

- (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];
}

@#$​​&^ UI でボタンを非表示にすると、これほど多くの時間が無駄になるとは信じられません。

4

2 に答える 2

1

この方法を使用してみてくださいUINavigationItem

- (void)setHidesBackButton:(BOOL)hidesBackButton animated:(BOOL)animated
于 2010-11-04T08:09:28.410 に答える
1

この問題を解決できませんでした。代わりに、App Logic を微調整して、戻るボタンを非表示にする必要がないようにしました。

于 2010-11-16T18:55:52.647 に答える