Настраиваемая навигация и представления контейнеров

Что я хочу

Полностью настраиваемая панель навигации, которая сохранится и позволит пользователю взаимодействовать с пользователем через настраиваемые модальные переходы.

Что я сделал

Я создал родительский контроллер представления, который содержит представление контейнера внизу и представление (настраиваемая панель навигации) вверху. В представление контейнера встроен контроллер представления, который может модально представлять другие контроллеры представления.

Контроллеры представления, которые представлены модально, используют настраиваемый переход (UIViewControllerTransitioningDelegate), чтобы всплывать снизу и занимать только часть контроллера представления внизу (т.е. оставляя меню видимым).

Когда первый контроллер представления представлен модально, с настраиваемым меню навигации все еще можно взаимодействовать. Однако, если первый модально представленный контроллер представления, в свою очередь, представляет другой контроллер представления, то настраиваемая панель навигации не реагирует на взаимодействие с пользователем.

|  NAV BAR  |             
|-----------|             |------------|               |------------|              
| Container |             |   View     |               |    View    |             
|   view    |-> EMBED ->  | Controller |-> Presents -> | Controller |-> Presents ->
|           |             |            |    Modally    |    1st     |    Modally   

(продолжение)

  |------------|
  |    View    |
->| Controller |
  |     2nd    |

Когда первый контроллер представления представлен модально, панель навигации по-прежнему реагирует на прикосновения. Когда отображается вторая (и все остальные в этой строке (например, 3-я, 4-я ...)), панель навигации все еще видна, но не реагирует на прикосновения пользователя.

На Github есть пример проекта, который иллюстрирует мою проблему.

В чем моя проблема

Я хотел бы иметь возможность нажимать на панель навигации независимо от того, сколько контроллеров представления я представил модально.

Должен ли я подходить к этой работе?

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


person KerrM    schedule 29.07.2014    source источник


Ответы (1)


Измените модальный стиль представления для контроллера второго представления в файле CVTFirstViewController.h в соответствии с проектом Github.

Используйте этот код

     secondViewController.modalPresentationStyle = UIModalPresentationCurrentContext;

вместо

     secondViewController.modalPresentationStyle = UIModalPresentationCustom;
person user3886713    schedule 29.07.2014
comment
Если я это сделаю, я не смогу настраивать представление анимации, верно? - person KerrM; 29.07.2014
comment
Нет, это свойство влияет только на область, охватываемую представленным контроллером представления. Чтобы изменить анимацию, вы должны использовать modalTransitionStyle. - person user3886713; 29.07.2014
comment
Это работает и с альбомным режимом? Я хочу, чтобы вид был представлен только в альбомном режиме. - person KerrM; 31.07.2014