1

iPhoneアプリをiPadに移植しています。iPhone では、テーブル内の行を選択すると、その後、次のビュー コントローラーがナビゲーション コントローラーの一番上にプッシュされます (現在、ナビゲーションは分割ビュー コントローラーの左側で実行されます)。iPad の場合、コードを次のように変更しました。

if (deviceIsIPad())
{
    UISplitViewController *svc = (UISplitViewController *)[self findNearestParentOfClass:[UISplitViewController class]];
    svc.viewControllers = [NSArray arrayWithObjects:[svc.viewControllers objectAtIndex:0],
                                                     nextViewController,
                                                     nil];
}
else
    [self.navigationController pushViewController:nextViewController animated:YES];

iPhone コード (コントローラーがナビゲーション コントローラーにプッシュされるとき) には問題はありませんが、iPad では viewWillAppear: は呼び出されません (ただし、viewDidLoad は呼び出されます)。呼び出されないのはなぜですか?強制的に呼び出すにはどうすればよいですか?

よろしくお願いします!

4

1 に答える 1

0

ここで何をしようとしているのか正確にはわかりませんが、splitview コントローラーを初期化してコントローラーを追加するだけでは、ビューが強制的に表示されるわけではありません。splitview コントローラーのビューをウィンドウに追加する必要があります。

Xcode Splitview テンプレートのアプリ デリゲートのコードは次のとおりです。applicationDidFinishLaunching:

splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = [NSArray arrayWithObjects:navigationController, detailViewController, nil];
splitViewController.delegate = detailViewController;

NSLog(@"master=%@",splitViewController.viewControllers);
// Add the split view controller's view to the window and display.
[window addSubview:splitViewController.view];
[window makeKeyAndVisible];

ナビゲーション コントローラーのビューが表示されるのは、既にウィンドウにアタッチされており、制御されているコントローラーの 1 つのビューを表示しているためです。

編集:

コメントから:

ここで引用されているすべての初期化コードは既に実行されています。ここで、左側のコントローラーにテーブルがあり、そこで別の行を選択し、右側のコントローラーを別のコントローラーに置き換えたいとします。viewDidLoad で初期化された一部の GUI 要素がビューに適切に表示されるため、splitViewController.view がウィンドウに追加されます。

splitviewコントローラーの詳細(右側)ビューが常に表示されるため、問題が発生するようです。つまりviewWillAppear、最初にロードされた直後に一度だけ表示されます。詳細側にビューが存在しないポイントはありません。スプリットビューのviewControllerを完全に交換するとどうなるかわかりません。

その場で詳細ビューを変更したい場合。右側にナビゲーション コントローラーを配置し、右側のコントローラーのイベントに応答して、そのナビゲーションにビュー コントローラーをプッシュ アンド ポップする必要があります。

iPad iPod アプリがどのように機能するかを見てみましょう。左側にはプレイリストが表示され、右側にはプレイリスト内のすべての曲のリストが表示されます。曲を選択すると、曲のリストの上に曲の詳細ビューが表示されます。

于 2010-06-30T13:14:04.247 に答える