2015-06-17 2 views
3

Я делаю приложение с возможностью поиска. Он будет иметь кнопку «Фильтр», которая при нажатии будет отображать список параметров фильтрации.Как представить контроллер просмотра внутри другого в Swift?

Модальный контроллер просмотра должен быть справа и слева, а не охватывать весь экран (как показано ниже).

Мне удалось отобразить контроллер просмотра программно, охватывая всю страницу, но мне не удаётся выяснить, как оживить открытие контроллера вида (справа налево), а также как оставить некоторое пространство для просмотра другого контроллера просмотра. Это должно быть в Свифт. Я видел несколько вопросов об этом, но все те, которые я мог найти, использовали Objective C и устаревшие API.

Благодаря

Пример:

eBay app

ответ

7

Там нет сомнений, несколько способов сделать это.

Одним из способов было бы добавить в свой текущий контроллер вида «вид контейнера» (это особый вид вида в списке объектов в IB), а управление - перетащить встроенный сегмент из представления контейнера на другой контроллер представления сцены, которую вы хотите разместить. Поместите и размер вашего контейнера, где вы хотите, чтобы он закончился, и добавьте ограничение переднего края, которое позиционирует его в этом положении.

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

Проложить розетку к ограничению.

В вашем методе viewWillAppear добавьте screen width - container x к константе ограничения и вызовите layoutIfNeeded() в представлении содержимого, чтобы переместить его за пределы экрана без анимации. Сохраните добавленную сумму в горизонтальное ограничение в переменной экземпляра.

Затем, когда вы хотите, чтобы оживить его на экране изменить значение константы на ограничение (вычесть сумму, которую вы добавили в viewWillAppear) и вызвать layoutIfNeeded() внутри animateWithDuration:animations: блока UIView.

0

Вы можете просто создать вид контейнера и анимировать его на экране справа налево.

let containerView = UIView() 
    containerView.addSubview(viewController.view) 
+1

На самом деле вам нужно сделать еще немного домашнего хозяйства, если вы хотите разместить другой контроллер представления в родительском/дочернем отношениях. Вам нужно добавить дочерний элемент в список контроллеров дочерних представлений, а затем есть количество системных сообщений, которые вы должны переслать. Лучше использовать представление контейнера в IB и подключить другой контроллер представления с встроенным segue, как я опишу в своем ответе. –

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