Я делаю техническую демонстрацию iPad, и я сталкиваюсь с серьезной технической проблемой.
У меня есть понятие приложения, которое усиливает UISplitViewController, но НЕ как первичный контроллер для целого приложения.
Поток приложения мог быть описан примерно как это:
Главный экран (UIViewController) Список-> Деталь "Каталог" (UISplitViewController) Супер Подробный экран (UIViewController, но мог мыслимый также быть ребенком SplitView).
Проблема находится в потоке между Домом и Каталогом. После того как представление UISplitViewController добавляется к UIWindow, оно начинает бросать соответствия hissy.
Проблема может быть получена в итоге в этом:
Когда UISplitView генерирует представление легкой сдобы, это, кажется, затем фиксируют к его родительскому представлению. После удаления UISplitView от подпредставлений UIWindow Вы получите исключение CoreGraphics, и представление не будет удалено.
При добавлении других представлений (по-видимому, в этом случае, главный экран, к которому Вы возвращаетесь), они не самовращаются, вместо этого, UISplitView, которому не удалось быть удаленным из-за исключения CG, продолжает отвечать на вращение вместо этого, вызывая ужасные ошибки рендеринга, с которыми нельзя просто "иметь дело с". На данном этапе добавление любых представлений, даже передобавление SplitView, вызывают каскад ошибок рендеринга.
Я затем пытался просто уехать, SplitView когда-либо представляют как "нижнее" представление, и сохраняющий добавление и удаление главного экрана от сверху его, но это перестало работать, поскольку SplitView доминирует над вызовами изменения Ориентации, и главный экран не будет вращаться, даже если Вы будете звонить [homeScreen becomeFirstResponder]
Вы не можете поместить SplitView в иерархию как UINavigationController, Вы получите прямую ошибку периода выполнения, так, чтобы опция была закрыта. Modals просто выглядят плохо и, препятствует так или иначе.
Мое предположение в данный момент - то, что единственный надлежащий способ иметь дело с этой проблемой, так так или иначе "разоружают" UISplitViewController так, чтобы это могло быть удалено из своего родительского представления, не бросая необработанное исключение, но я понятия не имею как.
Если Вы хотите видеть приложение, которое делает точно, что я должен сделать, GILT выезда Groupe в хранилище приложения для iPad. Они осуществили его, но они, кажется, запрограммировали весь пользовательский набор перехода представления.
Справка значительно ценилась бы.
Я решил это для себя ... на самом деле работал над ... представив все другие возможные полноэкранные представления как модальные окна SplitView ...
Это сомнительный способ делать что-то в моей книге, но Apple не оставляет вам выбора, если вы хотите использовать SplitView только «иногда» в приложении.
Apple заявляет :
Представление контроллера разделения представления всегда должно устанавливаться как корневой {{1 }} вид окна вашего приложения. Вы никогда не должны представлять разделенное представление внутри интерфейса навигации или панели вкладок .
Это действительно означает, что это должно быть корневое представление, а не подпредставление другого представления.Несмотря на то, что они добавляют:
Вы никогда не должны представлять разделенное представление внутри интерфейса навигации или панели вкладок
. Это не означает, что вы также можете добавить его в качестве подпредставления любого другого контроллера. (извините)
У меня такое чувство, что то, что вы переживаете, является побочным продуктом попытки сделать это. Я действительно удивлен, что приложение GILT Groupe не было отклонено. В последнее время Apple имеет тенденцию довольно строго соблюдать эти правила HIG. Они (как вы уже выяснили) вызывают довольно неприятную ошибку времени выполнения, когда вы пытаетесь добавить их в NavigationController.
Мне удалось создать второй UIWindow. Я связываю с ним UISplitViewController и выключаю его в главном окне, когда хочу показать разделенное изображение. Кажется, они работают так, как я хотел, за исключением небольшой задержки ротации и сообщения журнала о "wait_fences".
Если вы не разрабатываете устройства для взломанных устройств, то изменение правил / желаний яблок - не лучшая идея. Как и состояние Jann и Jasconius, приведенное выше, это означает сохранение корня представления контроллера splitView, без чрезмерного использования модальных окон (расплывчато) и без использования нескольких окон.
Кроме того, приложение Gilt доступно только в США.
Я тоже пытался найти решение и закончил тем, что программно удалил представления из окна, как говорит Туаннд, но пейзаж ошибка рендеринга непростительна.
@Jasconius, Какое максимальное количество модальных окон вы показываете в любое время?