現在の向きをサポートしていないビュー コントローラーにポップするときに、UINavigationControllerDelegate メソッドが呼び出されない。
アプリのルート ビュー コントローラー (ストーリーボードの初期ビュー コントローラー) として UINavigationController があります。
向きのためにこれを使用して ViewController A をプッシュするとします。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
したがって、ランドスケープ モードはサポートされていません。その上で、別の ViewController をコードでプッシュしましょう。
@interface B : UIViewController <UINavigationControllerDelegate>
@end
@implementation B
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES; // any orientation supported
}
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nc = (UINavigationController*)appDelegate.window.rootViewController;
nc.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
@end
ここで、iPhone を縦向きにして、ビュー コントローラー B を A の上にプッシュし、何らかのタッチ イベントを介して、ナビゲーション バーの「戻る」ボタンをタッチすると、すべて問題なく、デリゲート メソッドが呼び出されます (そこでいくつかのことを行います)。 )。
しかし、ビュー B を表示しているときに、横向きに回転してから戻るボタンを押すと、それらのデリゲート メソッドは呼び出されません!! メソッドが時々呼び出され、他のメソッドが呼び出されない場合、 UINavigationController のデリゲートを設定するポイントは何ですか? 確かに私は何か間違ったことをしています。
デリゲートを AppDelegate や MainView などの他のクラスに配置しようとしましたが、何も変わりません。
何か案は ?
デモコードはこちら: git://github.com/malaba/NavBarTest.git
上記のように変更された、基本的なマスター/ディテール テンプレートから。
私のポイントを示す方法は?手順は次のとおりです。
- マスター ビュー (+ 右上) にいくつかの行を追加します。
- 行をタップして詳細ビューに移動します
- ログイン出力の表示を参照してください
- 戻るボタン (「Master」というラベルが付いています) を押すと、再びログが表示されます。
詳細ビューで iPhone (またはシミュレーター) を回転させてみてから、「戻る」とログが表示されません。