2012-01-15 3 views
4

У меня проблема. Мое приложение - это контроллер панели вкладок, а его первый контроллер представления - контроллер с раздельным просмотром. Это, похоже, не для Apple, потому что в документах говорят, что разделяемый контроллер потока должен быть корнем, поэтому, возможно, это и есть причина моих проблем.Иногда willHideViewController из UISplitViewControllerDelegate не называется

Проблема в том, что иногда, willHideViewController из UISplitViewControllerDelegate не вызывается, поэтому по этой причине иногда не создается верхняя/левая кнопка, которая является анонимной. Я понял, чтобы воспроизвести эту ошибку, попробуйте несколько раз: -Landscape mode. -Выберите вкладку, отличную от крана контроллера. -Переведите iPad к портрету на этой вкладке. -Перейдите на вкладку диспетчера разделенного вида, а иногда, willHideViewController не вызывается, поэтому вы не увидите верхнюю кнопку. Однако, если я поверну свой iPad к пейзажу, а затем к портрету, он будет исправлен.

Я попытался вручную вручную несколько оборотов обойти эту проблему, но не повезло. Мне по-прежнему нужно попробовать любой класс клонирования контроллера вида view из github или аналогичного. У вас есть идея, что происходит или какая-либо работа?

Здесь я покажу вам два примера, которые работают правильно.

enter image description here enter image description here Большое спасибо за вашу помощь.

+0

Привет, У меня точно такая же проблема, вы с ней что-нибудь нашли? Я думаю, что необходим способ распространения willShow ... willHide invocations во всех вкладках. Довольно неприятно ... – Snips

+0

Имея ту же проблему здесь, также с 'UISplitViewController' внутри' UITabBarController'. В моем приложении поведение «UISplitViewController» дополнительно зависит от ориентации, в которой запускается приложение: если он запускается в ландшафте, поведение происходит так, как вы описываете. Если, однако, приложение запускается на портрете, ваш сценарий отлично работает, и вместо этого возникает проблема, когда приложение поворачивается в альбомное ('UISplitViewController' не вызывает метод' willShowViewController: invalidatingBarButtonItem: 'delegate). – herzbube

ответ

0

Где вы устанавливаете делегат splitViewControllers? Возможно, вы можете установить делегат при загрузке вкладки. Похоже, вы его установили, только когда вы повернули один раз?

В противном случае, see this example

Здесь они имеют TableViewController быть делегатом splitviewcontroller. Возможно, вы могли бы сделать то же самое с TabBarController?

0

Я пришел к выводу, что это не может быть сделано каким-либо образом, что я считаю «достаточно» законным. Возможно, разочарование близко, но проблема наличия willShow ..., willHide будет распространена на контроллеры разделенного вида под каждой вкладкой.

Решение, которое, кажется, скорее всего, работать есть,

https://github.com/grgcombs/IntelligentSplitViewController/blob/master/IntelligentSplitViewController.m

Хотя этот код, несомненно, умный, это немного слишком «боковой двери» для меня. Я подозреваю (но не знаю), что просто использовать методы делегата недостаточно. Разумеется, самому UISplitViewController необходимо изменить его внутреннее состояние, а также вызвать методы делегата? Этот метод «просто» вызывает методы делегата при изменении ориентации.

Итак ... Я решил на более законное решение, которое должны использовать новый метод, введенный в прошивке 5.

- (BOOL) splitViewController:(UISplitViewController *)svc 
      shouldHideViewController:(UIViewController *)vc 
      inOrientation:(UIInterfaceOrientation)orientation 
{ 
    return NO; 
} 

Итак, меню мастера никогда не скрывало, и поэтому проблема управления popover не возникает.

Конечно, это еще не совсем «законным», как это по-прежнему включает в себя UISplitViewControllers, которые не на самом высоком уровне (UITabViewController находится на верхнем уровне, а также мнения раскола на каждой вкладке)

Хороший удачи в зависимости от того, какое решение вы выберете.

Я обновлю этот ответ, когда подтвержу, что Apple одобрит приложение, использующее это решение.

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