2014-08-22 2 views
0

Я пытаюсь разработать приложение для ориентации на iPad. В ландшафтном режиме MasterViewController всегда должен быть видимым, и у меня нет никаких проблем. Но в режиме portraid мне нужно создать метод show/hide. Основная проблема, я не могу использовать методы делегата, которыеiOS - Показать/скрыть UISplitViewController без использования методов делегатов с UIBarButtonItem

- (Недействительными) splitViewController: (UISplitViewController *) SVC willHideViewController: (UIViewController *) aViewController withBarButtonItem: (UIBarButtonItem *) barButtonItem forPopoverController: (UIPopoverController *) шт

и

- (недействительными) splitViewController: (UISplitViewController *) SVC willShowViewController: (UIViewController *) aViewController invalidatingBarButtonItem: (UIBarButtonItem *) barButtonItem

Потому что мой detailViewController не является NavigationController и не должен be. Также detailViewController не может иметь NavigationItem. Позвольте мне объяснить, почему:

Я хочу, чтобы у всех моих страниц были видны панели в нижней части экрана. Поэтому я никогда не меняю detailViewController. В верхней части экрана у меня есть контроллер навигации, встроенный в представление контейнера. Итак, если вы выбрали один из элементов таблицы ViewView MasterViewController, то rootViewController NavigationController изменяется. Вот почему я не могу иметь элемент навигации в detailViewController.

У этих rootViewControllers есть кнопки, которые передают свои состояния в detailViewController по специальному методу делегата. И этот метод должен скрывать/показывать masterviewcontroller.

Я не хочу создавать некоторые пользовательские представления и/или анимации или пользовательские popover для достижения этого. Может кто-нибудь мне помочь?

ответ

1

Детальный просмотр контроллера не должен быть UINavigationController быть делегатом для разделения вида.

Вы можете установить DetailViewController в качестве делегата для UISplitViewController. Когда сплит-вид скроет вид (портрет), сохраните popover, который вы можете позже показать, если необходимо.

Пользователи могут по-прежнему показывать его без каких-либо кнопок - с помощью прокрутки с левой стороны экрана. Если этого достаточно для вашего приложения, вам не нужно реализовывать методы делегата.

// In App Delegate or Nib: 
splitViewController.delegate = detailViewController; 




// In Detail View Controller : 

- (void)splitViewController:(UISplitViewController*)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem*)barButtonItem 
     forPopoverController:(UIPopoverController*)pc { 


    self.popoverController = pc; 

    // Update ui 
    ... 
} 


- (void)splitViewController:(UISplitViewController*)svc 
    willShowViewController:(UIViewController *)aViewController 
    invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { 

    self.popoverController = nil; 
} 


- (void)showMenu { 
    [self.popoverController presentPopoverFromRect: ...] 
} 
+0

Любой UINavigationController не является делегатом SplitViewController. И в этом все дело. Эти методы заставляют меня иметь UINavigationController или UINavigationItem для detailViewController, потому что этим методам нужен UIBarButtonItem, и мой detailViewController не может их иметь. –

+0

Oooppss .. Извините, я неправильно понимаю вас и вас код. Теперь все в порядке. Спасибо за помощь. –

+0

Не беспокойтесь, методы делегатов в UISplitView довольно запутывают. – Krzysztof

Смежные вопросы