既存の iPhone アプリを iPad アプリ用に変換しています。iPhone アプリは、行の選択に基づいてカスタム ビュー コントローラー (UIViewController) をプッシュするカスタム ビュー コントローラー (UITableViewController) を最初にユーザーに提示するコンテナー ビュー コントローラー (UINavigationController) を使用して構築されました。
iPad アプリでは、ユーザーにカスタム UIViewController (コンテナー コントローラーなし) を直接提示し、UIPopoverController を介してさまざまなオプションを選択できるようにしています。myAppDelegate.m では、以下を使用してカスタム UIViewController をウィンドウに追加するだけです。
[window addSubview:[myCustomViewController view]];
myCustomViewController.m では、viewWillAppear で方向変更通知を登録することにより、デバイスの回転に大きく基づいてビューを変更しています。
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
次に、didRotate: メソッドで方向をテストしており、非常に奇妙な結果が得られています。ビューをロードするだけで3回呼び出されていますか? また、ビューの前の図面に対応する方向を報告しているようですか?
- (void) didRotate:(NSNotification *)notification
{
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
NSLog(@"Portrait");
} else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
NSLog(@"Landscape");
}
}
私はドキュメントを読んでいましたが、ウィンドウにサブビューを追加しても(コンテナクラスなしで)viewWillAppear:メソッドが呼び出されないようですが、私の場合は信頼できないだけで呼び出されているようです。
このアプリに使用する必要がある他のパターンはありますか? 単一のカスタム ビューをロードし、2 つのポップオーバー コントローラーを使用したいだけです (他のナビゲーションはありません)。
-デリック
ところで、カスタム viewController をアプリ デリゲートの UINavigationController にプッシュした場合とまったく同じように動作します。このアプリにはナビコントローラーは必要ありません。