Как создать 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)

Самый простой способ, который я видел до сих пор!