willHideViewController вызывается несмотря на то, что приложение находится в ландшафтном режиме - PullRequest
2 голосов
/ 27 апреля 2011

Я разрабатываю приложение для iPad, которое запускается в ландшафтном режиме.

На первом экране отображается UISplitViewController, и моя проблема заключается в том, что, хотя приложение находится в ландшафтном режиме, делегат уведомляется о splitViewController:willHideViewController:withBarButtonItem:forPopoverController:, несмотря на это.документация гласит:

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

Поскольку приложение находится вландшафтный режим и не переходить в портретный режим Я не понимаю, почему мой делегат уведомлен.Почему это так?

1 Ответ

0 голосов
/ 24 апреля 2012

Валентин, чтобы прямо ответить «почему это так?», Я думаю, что ответ просто в том, что это ошибка в реализации их API.

, как вы, кажется, обнаружили, когда в альбомной ориентации, он вызывает вышеупомянутое, когда кажется, что это не должно, а затем вызывает splitViewController: willShowViewController: invalidatingBarButtonItem:.

также, я обнаружил, что в портретной ориентации он отправляет очень раннее сообщение (т.е.до того, как view.frame был настроен) на splitViewController:willHideViewController:withBarButtonItem:forPopoverController:.

, что меня больше всего раздражало, так это то, что при использовании кода, предоставленного при создании их шаблона, панель кнопок появлялась и затем исчезалапри запуске.

Мое решение состояло в том, чтобы реализовать обходной путь, который я разместил на git@github.com: johnkdoe / freeforall.git в классе KludgeWorkaroundForBuggySplitViewDelegateStartup.

сделать это суперклассом вашеготекущий класс контроллера подробного представления, как в

//@interface MyViewController : UIViewController<UISplitViewControllerDelegate>
@interface MyViewController : KludgeWorkaroundForBuggySplitViewDelegateStartup

, это установит начальный прикладНа панели заголовок Мастер, если у вас нет того, что вы предпочитаете.вы можете переопределить это, переопределив метод @property в вашей реализации подкласса.если вы хотите сделать больше, чем то, что есть в этом классе kludgeWorkaround, вы можете переопределить их самостоятельно и (либо скопировать и вставить, либо) вызвать [super ...] их перед выполнением своей собственной работы.

я могуНельзя сказать, что это решает проблему того, что мне кажется ошибкой реализации, но обходной путь избавляет от краткого появления панели кнопок при запуске приложения контроллера сплит-представления в ландшафтном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...