0

UINavigationController に埋め込まれた UIViewController を持つマスターを持つ UISplitViewController があります。ツールバー ボタンは、セグエを介して UIPopoverController を起動します。このようなポップオーバー コントローラーは、SettingsViewController と呼ばれる UINavigationController にも埋め込まれた UIViewController をラップします。

UIStoryboardPopoverSegue から UIPopoverController へのポインターを取得できます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender
{
  if ([segue.identifier isEqualToString:@"Settings"]) {
    UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue*) segue;

    SettingsViewController *settingsViewController = ... // TODO
    settingsViewController.popoverController = popoverSegue.popoverController;
  }
}

しかし、内部の SettingsViewController への参照を取得する方法が見つかりません。クラスメソッドを介してアクセスできる静的フィールドを使用したくありません。これはひどい回避策です。

それを正しくするために何が欠けていますか?

ご協力いただきありがとうございます!

4

2 に答える 2

5

UIPopoverSegue には UIPopoverController が含まれています

UIPopoverController *popoverController = popoverSegue.popoverController;

これにより、簡単に contentViewController (ポップオーバーに表示されるビュー) を取得できます。

UINavigationController *contentNC = (UINavigationController *) popoverController.contentViewController;

そして、コンテンツ ナビゲーション コントローラーから、実際のビュー コントローラーを取得します。

SettingsViewController *settingsVC = [contentNC.viewControllers lastObject];

これで問題は解決しますか?

于 2012-08-22T16:13:54.733 に答える
0

質問の冒頭で説明したように、アプリに非常によく似た設定があります。

私のprepareForSegue(そして私がチェックする場所の中でsegue.identifier)私は次のようにポップオーバーのView Controllerで物事をつかんで設定します:

settingsViewController *settingsPop = segue.destinationViewController;
settingsPop.someVar = self.var;

segue.destinationViewControllerシンプルで簡単になります。

于 2013-09-16T02:41:09.327 に答える