私はiOS5に取り組んでおり、ストーリーボード、セグエ、さまざまな向きのビューの調整に苦労しています。過去数日間Appleの助けを借りた後、私は自分の答えの場所を1つ見つけられませんでした。私は非常に注意深く明確に表現するという次の結論に達しました。私が正しいかどうか、誰かが教えてくれることを願っています。
1-ストーリーボードを使用することは、セグエを使用する必要があることを意味しません(はい、これは初心者にとって混乱です)。
2-ナビゲーションコントローラーに属するVC間でのみセグエを使用できます。
3-一方、ナビゲーションコントローラーがあるからといって、あるVCから別のVCにセグエを使用する必要があるとは限りません(そうです!)。したがって、あるVCから別のVCに移動しようとしている場合(最初のVCがNav Controllerに属しているかどうかに関係なく)、次のことができます。
WhiteVCクラスとYellowVCクラスがあり、(ストーリーボード内の)WhiteVCビューにボタンを配置し、それをWhiteVCクラスのIBActionにリンクしたとします。これは、WhiteVC.mで実装するコードであり、そのボタンをクリックして、YellowVCビューを表示できるようにします。
-(IBAction)GoToYellow
{
YellowViewController *YellowVC=[self.storyboard instantiateViewControllerWithIdentifier:@"myYellowVC"];
[self presentViewController:YellowVC animated:YES completion:nil];
}
YellowVCからWhiteVCに戻るには、YellowVCビューに別のボタンを作成し(上記と同じプロセスに従います)、次のコードを使用します。
-(IBAction)ReturnToWhiteVC
{
[self dismissViewControllerAnimated:YES completion:nil];
}
これにより、YellowVCが閉じられ、WhiteVCに戻ります。
4- 1つのVCが複数のビューを所有する(インスタンス化する)ことはお勧めしません(たとえば、方向が異なる場合)。ビューごとに個別のVCを使用することをお勧めします。ただし、VCがMVCの一部として他のVCをインスタンス化することは問題ありません。
5-これはすべて、Nav Controllerを備えたアプリを作成していたために発生しましたが、そのルートVCは、横向きか縦向きかによって異なります(異なるビューを持つ異なるVC)。したがって、VCをプログラムでインスタンス化することもできます(上記の#3のように)。これはうまく機能しました。または、セグエを使用して移行を実行したい場合は、アップルのヘルプドキュメントに次のコードが用意されています。
BOOL isShowingLandscapeView;
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self performSegueWithIdentifier:@"AlternateView" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) && isShowingLandscapeView)
{
[self dismissViewControllerAnimated:YES completion:nil];// breakpoint shows that this is triggered
isShowingLandscapeView = NO;
}
}
上記のコードは明らかにNavController(セグエのため)にのみ適用され、向きが縦向きから横向きに変わったときに機能しましたが、縦向きに回転すると、横向きVCが縦向きに回転してしまいます。私はここで何を間違っているのですか?
誰かがこれらの点を検証/確認し、私の質問に答えてくれることを願っています。KBに感謝します。