Как создать Popovers с Xcode Storyboards
Как я могу создать popover в iPad Storyboard для приложения iOS 5.0+?
Есть уже одна настройка с шаблоном проекта Xcode (Utility App), но я не могу понять, как Apple заработала. Я попытался имитировать его, но получил только ошибки. Я даже посмотрел сайт Apple Dev, но только получил устаревший код, который привел к предупреждениям и ошибкам сборки.
У меня есть CBMainView
и CBMasterView
(за исключением уже включенного основного представления) и UIToolbar
с UIToolbarButton
. Мне нужно, чтобы пользователь нажал кнопку на UIToolbar
, а вверх появился мой 320x300 Popover (CBMasterView
).
Как я могу сделать это с помощью раскадровки Xcode? Учебники, ответы, код или ссылки приветствуются!
Ответы
Ответ 1
Перед iOS 5 нужно было бы отобразить еще один UIViewController
с помощью первого ответчика через модульную презентацию (и кучу кода).
Чтобы создать popover в режиме раскадровки Xcode (iOS 5+), используйте UIButton
или UIToolbarButton
и создайте серию Storyboard Segue между кнопкой и UIViewController
, которую вы хотите перекрыть.
Создание сегмента между кнопкой и другим UIViewController
является простым. Вот как:
- Нажмите кнопку в своем раскадровке и Control + Drag от кнопки до
UIViewController
по выбору. Вы должны увидеть светло-голубую линию, которая простирается от кнопки до кончика мыши.
-
После перетаскивания синей линии на выбранный ViewController появится небольшое черное меню. В этом меню отображаются различные параметры выделения. Выберите Popover
.
![Popover Segue Menu]()
-
Если все было сделано правильно, этот отступ должен быть видимым в инспекторе соединений при выборе кнопки:
![Use Popover instead of Modal or Push]()
Созданный UIViewController
должен также иметь собственный размер, который меньше, чем весь экран. Вы можете установить нестандартный размер, выбрав "Контроллер представления" и установив для него свой размер значение freeform
или master
(320 x 850).
Ответ 2
Я также ищу ответ на эту проблему. Я решил это с помощью NSNotification.
Вот как:
Контроллер просмотра, который отображает всплывающее окно, должен зарегистрироваться для получения уведомления:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageSetup) name:SPVWChangeLanguage object:nil];
languageSetup
- это функция, которая будет вызываться, SPVWChangeLanguage
- это строка, которую вы определяете в своем диспетчере просмотра всплывающих окон
Я добавил эту строку в viewDidAppear
Теперь в вашем диспетчере просмотра всплывающих окон добавьте эту строку, когда пользователь выбирает что-то в таблице:
[[NSNotificationCenter defaultCenter] postNotification: [NSNotification notificationWithName: SPVWChangeLanguage object:self]];
прежде чем отклонять всплывающее окно:
[self.popOverController dismissPopoverAnimated:YES];
Это все. Будет вызываться селектор languageSetup (в моем случае). Обязательно удалите уведомление, когда ваш контроллер просмотра уйдет:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Я делаю это в viewWillDisappear
Я думаю, что должен быть более простой способ. Но, по крайней мере, это работает для меня.
Ответ 3
Если вы используете раскадровку с IOS8, взгляните на этот пост, ответьте мне на это!
Как представить модальный поверх текущего вида в Swift
Вкратце: вы создаете отдельное всплывающее окно, придаете фону цвет с низкой (или отсутствующей) непрозрачностью и соединитесь с основным видом во всплывающем представлении с помощью модального сегмента.
Затем в раскадровке нажмите на сегмент, а затем в инспекторе attibute: измените презентацию на "поверх текущего контекста" (и, возможно, переход к перекрестному растворению, если вы используете непрозрачность, которая больше 0)
Самый простой способ, который я видел до сих пор!