1

ナビゲーションコントローラーの戻るボタンが表示されない場合があります。時々そうなるので、おそらく他の場所のsomコードで何かが起こっていることに注意してください、しかし私はこれを私が考えることができるあらゆる方法でデバッグしようとしました、そして何もうまくいかないようです。

ビューコントローラをプッシュするためのコードは次のとおりです(かなり標準的):

CommentsTableViewController *vc = [[[CommentsTableViewController alloc] init] autorelease];
vc.puzzleID = self.puzzleModel.puzzleID;
[self.navigationController pushViewController:vc animated:YES];

この問題をデバッグするために、viewWillAppearとviewDidAppearのCommentsTableViewControllerに次のコードを配置しました(オブザーバーとして一度だけ登録する場合を除く)。

self.navigationItem.hidesBackButton = NO;

[self.navigationItem addObserver:self forKeyPath:@"backBarButtonItem" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context:nil];

self.navigationItem.backBarButtonItem.title = @"Tactic";
NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setTitle:@"Tactic"];

これはどれも役に立たないようです。ブレークポイントを設定すると、階層内で私の上のView Controllerにタイトル(@ "Tactic")があり、hidesBackButtonはすでにNOになっているようです。backBarButtonItemプロパティはnilであり、常にnilですが、backBarButtonItemがある場合でも、これは予期される動作だと思いますか?

編集:親コントローラーで、最初はhidesBackBackButtonをYESに設定し、その後(次のコントローラーを押す前に)、NOに戻します。これらの行を削除すると、新しいViewControllerに戻るボタンがあります。あるビューコントローラのナビゲーションアイテムが次のナビゲーションアイテムに影響を与えるのはなぜですか?

任意の提案やアイデアを歓迎します。どうもありがとう。

4

2 に答える 2

1

おそらく、問題のデバッグをより適切に解決できるかもしれません.あなたは、あなたを元に戻すボタンがこれであると仮定しました:

self.navigationItem.backBarButtonItem.title = @"Tactic";

しかし、それはゼロです。そのボタンを見つけたい場合は、ナビゲーション コントローラーのナビゲーション バーを見てください。

NSLog(@"%@",self.navigationController.navigationBar.topItem);

コードが機能しない理由がわかりません。また、これを行う必要もありません。

self.navigationItem.hidesBackButton = NO;  

代わりにこれを試してください:

self.navigationController.navigationBar.topItem.hidesBackButton = NO;

とにかく、NOに設定しなくてもこれはうまくいきます。

これで問題が解決しない場合は、少なくともデバッグに役立つはずです。それでも問題が解決しない場合は、コメントに投稿して、その NSLog() が出力するものを教えてください。

于 2012-12-28T01:22:56.230 に答える
0

Ok。私はそれを解決しました。なぜこれが違いを生むのか私にはわかりませんが、違いはあります。

私がhidesBackButtonを呼び出していたのと同じ実行ループで、私は次のことも呼び出していました。

[self.view addSubview:self.chessBoardViewController.view];

これはどういうわけかnavigationBarを台無しにしていた線のようでした。この行を削除すると、完全に機能します。したがって、私が見つけた解決策は、この行を次のように置き換えることでした。

[self.view performSelector:@selector(addSubview:) withObject:self.chessBoardViewController.view afterDelay:0];

なぜこれが機能したのかわかりません。何が起こっているのかについて誰かが洞察を持っている場合は、コメントしてください。

于 2012-12-28T04:41:41.017 に答える