1

私はIOS開発に不慣れで、答えを見つけることができなかった問題に遭遇しました.

2 つの別個のナビゲーション コントローラーで UISplitViewController を使用しています。1 つはポップオーバー用、もう 1 つは詳細用です。基本的に、さまざまな詳細ビューをデリゲートとしてナビゲーション コントローラーに割り当てることができる必要があります。これは、ポップオーバーが表示されるものと表示されないものがあるためです。

viewDidLoad で使用している現在のコードは次のとおりです。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UISplitViewController *splitViewController = (UISplitViewController *)appDelegate.window.rootViewController;
splitViewController.delegate = self;

問題は、デリゲートがこれを使用する最初のビューにのみ割り当てられていることです。これを他のビューで使用すると、前のビューのデリゲートがまだ呼び出されています。

誰が私が間違っているのか知っていますか? ありがとう。

4

1 に答える 1

0

私はそれを考え出した。

UISplitViewController のドキュメントには、

複雑な構成では、マスター ビュー コントローラーと詳細ビュー コントローラーを管理し、それらの間を仲介するために、別のカスタム コントローラー オブジェクトが必要です。カスタム コントローラーは分割ビュー > コントローラーのデリゲートであり、現在の詳細ビュー > コントローラーと通信して、ポップオーバー バー ボタン項目を表示および非表示にします。

ですから、私がやっていることは最初から間違っていました。次のように、すべての SplitView ロジックを 1 つのビュー コントローラーに配置して修正しました。

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:        (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
  BOOL hide = YES;

  // Get current view from navigation controller
  UINavigationController *detailNavigationController = [svc.viewControllers objectAtIndex:1];
  NSInteger topIndex = detailNavigationController.viewControllers.count - 1;
  UIViewController *detailviewController = [detailNavigationController.viewControllers   objectAtIndex:topIndex];

  // Perform different actions based on visible view
  NSString *detailTitle = detailviewController.title;
  if([detailTitle isEqualToString:@"Controller_Name"]) { 
      hide = NO;
  }
  return hide;
}
于 2012-10-03T13:50:21.447 に答える