Это очень старый вопрос, и было много других вопросов о тех же типах вещей, поэтому я был удивлен, увидев этот вопрос без ответа.Не уверен, что вам все еще нужен ответ, но для всех, кто находит это в поиске, я надеюсь, что это поможет.
Здесь меня смутило то, что когда вы говорите «кнопка навигации для masterView»исчезает ", это действительно только кажетсяЧто действительно происходит, так это то, что в вашем новом взгляде его еще никогда не существовало, а вы просто заменили старое представление.Вы даже упоминаете об этом в вопросе, что вы заменили подробный вид.Это заставило меня задуматься, когда я посмотрел на файлы, сгенерированные из шаблона приложения Master-Detail, из которого я изначально создал свое приложение, которое назначило UISplitViewConrollerDelegate для представления сведений.
Поэтому, когда вы или я заменяем подробный вид с новым видом, мы также просто стерли UISplitViewConrollerDelegate, поэтому мне нужно было убедиться, что новый подробный вид также действует как UISplitViewConrollerDelegate, что создало другие проблемы для отслеживания popoverButtonItemон хранится в iVar.
В справочнике по классам UISplitViewController написано:
Существует два основных подхода, которые можно использовать в зависимости от типасоздаваемого приложения:
Простой интерфейс мастер-детали, в котором вид детали остается постоянным.В этой конфигурации один контроллер представления управляет подробным представлением в течение всего жизненного цикла приложения и обновляет содержимое подпредставлений, чтобы отразить выбор в главном представлении.Главный контроллер вида имеет ссылку на контроллер подробного вида и информирует контроллер подробного вида всякий раз, когда выбранный элемент изменяется или происходит какое-либо другое соответствующее событие.Контроллер подробного представления может также служить делегатом контроллера разделенного представления.
Сложное приложение, в котором могут меняться главное и подробное представления (и соответствующие контроллеры представления).В сложных конфигурациях вам необходим отдельный пользовательский объект контроллера для управления главным контроллером и контроллерами детального представления и для связи между ними.Пользовательский контроллер, как правило, является делегатом контроллера разделенного представления и отвечает за связь с текущим контроллером подробного представления, чтобы показать и скрыть элемент кнопки всплывающей панели.
Второй здесь - это то, что у вас есть, ина самом деле Apple предоставляет пример приложения под названием MultipleDetailViews , которое показывает, как это правильно сделать, что включает в себя размещение делегата вне контроллеров подробного представления и соответствие каждого из этих контроллеров подробного представления как минимум двум протоколам.Способы один: добавить мастер-кнопку, а второй - удалить мастер-кнопку с панели навигации (при условии, что у вас есть панель навигации в подробном представлении).
Обратите внимание, что «кнопка навигации для masterView» всегда должна бытьотображается и скрывается в подробном представлении (и каждом из них, если у вас их больше одного), потому что главное представление - это то, которое будет скрыто время от времени.Это было еще одной вещью, которая продолжала сбивать меня с толку, потому что я продолжал думать, что он принадлежит контроллеру основного вида.
Я предполагаю, что вы, возможно, уже все это сработали, но это помогает объяснить фактический ответваш вопрос.
Ваш новый контроллер подробного просмотра должен проверить, отображается ли ваше изображение в UISplitView, представленном в книжной ориентации, и, если да, представить кнопку.
Просто сделайте это в - (void) viewWillAppear: (BOOL) анимированном методе и отобразите его при необходимости.Это также означает, что вы должны либо отслеживать последнюю скрытую кнопку, либо создавать новую.
Надеюсь, это поможет, и если кто-то читает эту логику неправильно, поправьте меня.Это все еще сбивает меня с толку каждый раз, когда я обнаруживаю, что эта кнопка отсутствует в моем приложении.