всплывающее меню iPhone, как iPad popover?

Как я могу реализовать это всплывающее меню в приложении iphone, как popover в ipad?

alt text


EDIT : Это лучший момент: https://github.com/runway20/PopoverView введите описание изображения здесь

Взгляните на реализацию iPhone UIPopoverController: WEPopover

iOS 8 и более поздние версии

Начиная с iOS 8, вы можете использовать UIPopoverPresentationController для iPhone в дополнение к iPads.

введите описание изображения здесь

Настроить

  • Добавьте UIBarButtonItem в свой основной controller просмотра.
  • Добавьте еще один controller просмотра в раскадровку. Измените его на размер, который вы хотите, чтобы popover был, и добавьте любой контент, который вы хотите. Для моего примера я просто добавил UILabel . Если вы хотите создать целые меню, просто добавьте представление таблицы или список кнопок.
  • Добавьте segue из элемента кнопки панели в controller вида, который вы будете использовать в качестве popover. Вместо того, чтобы show , выберите « Present as Popover .

введите описание изображения здесь

  • Выберите segue в раскадровке и установите идентификатор в popoverSegue (или любую строку, которую вы назвали в коде).

введите описание изображения здесь

  • В инспекторе атрибутов для controllerа просмотра popover установите флажок Использовать предпочтительный явный размер и убедитесь, что это тот размер, который вы хотите.

введите описание изображения здесь

Код

Это код для главного controllerа представления, в котором есть элемент кнопки панели.

 class ViewController: UIViewController, UIPopoverPresentationControllerDelegate { override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "popoverSegue" { let popoverViewController = segue.destinationViewController popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover popoverViewController.popoverPresentationController!.delegate = self } } // MARK: - UIPopoverPresentationControllerDelegate method func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { // Force popover style return UIModalPresentationStyle.None } } 

Поповер в произвольной точке привязки

Если вы хотите, чтобы popover отображался где-то помимо элемента панели (например, в UIButton ), вам нужно установить sourceView и sourceRect . Подробнее см. В этом ответе .

введите описание изображения здесь

дальнейшее чтение

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

  • Стиль iPad Popovers на iPhone с быстрым
  • Презентации iOS 8 Popover
  • UIPopoverPresentationController на iOS 8 iPhone
  • Общий обзор всплывающих опций в iOS

На iPhone вы обычно используете UIActionSheet для набора таких кнопок. Он скользит снизу вверх, а не появляется рядом с кнопкой, но это стандартное поведение на iPhone.

Есть один, который даже лучше, чем WEPopover. Разработанная компанией под названием 50pixels, она называется FPPopover .

Вы можете скачать FPPopover на https://github.com/50pixels/FPPopover

Вам нужно будет вручную создать экземпляр UIView с помощью специального фонового изображения или чертежа с прозрачностью, добавить некоторые UIButtons (или другой тип пользовательского представления) сверху, а также каким-то образом обработать все штрихи вне этого представления.

Обратите внимание, что это нестандартный интерфейс. План действий будет более совместимым с HIG.

Вы можете проверить WYPopoverController: https://github.com/sammcewan/WYPopoverController

Снимок экрана выше не является списком UIActionSheet. Он выглядит как простой подclass UIView с пользовательскими UIButtons поверх него. Итак, продолжайте и создайте подclass в соответствии с вашими потребностями, а затем добавьте его в качестве подсмотра к вашему виду каждый раз, когда вам это нужно.

Чтобы получить popover из элемента панели правой боковой панели на controllerе навигации, который является частью controllerа таблицы, для меня работали для Swift 4 и Xcode 9.

  1. Следуйте инструкциям в Suragch, приведенном выше (как отредактировано сообществом).
  2. Не используйте Segue, как показано в ответе выше. По какой-то причине segue заставляет popover идти в полноэкранном режиме, несмотря на то, что он задает явный размер.
  3. Дайте вашему controllerу просмотра popover название в Attributes Inspector
  4. Добавьте следующий код в controller TableView, где будет отображаться всплывающее окно.
  5. Измените строковый идентификатор (тот, который здесь ссылается на файл Constant.swift)
  6. Измените «как FilterVC», чтобы использовать заголовок вашего controllerа popover view.

     /// Shows a filter popover view @IBAction func filterBtnPressed(_ sender: UIBarButtonItem) { let popover = storyboard?.instantiateViewController(withIdentifier: FILTER_VC) as! FilterVC popover.modalPresentationStyle = UIModalPresentationStyle.popover popover.popoverPresentationController?.backgroundColor = UIColor.green popover.popoverPresentationController?.delegate = self popover.popoverPresentationController?.backgroundColor = ColorPalette.Blue.Medium popover.popoverPresentationController?.sourceView = self.view popover.popoverPresentationController?.sourceRect = CGRect(x: self.view!.bounds.width, y: 0, width: 0, height: 0) popover.popoverPresentationController?.permittedArrowDirections = .up self.present(popover, animated: true) } } func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { return UIModalPresentationStyle.none } 
  • Как включить и использовать новые шрифты в iPhone SDK?
  • Значение предупреждения "во время презентации!"
  • Создать случайное число в пределах диапазона?
  • Округлые углы на UIImage
  • Когда вы делаете подчеркивание перед переменной экземпляра?
  • Лучший способ удалить из NSMutableArray во время итерации?
  • Ширина пикселя текста в UILabel
  • Прокрутка UITableView внутри UIScrollView
  • Почему NSUserDefaults не удалось сохранить NSMutableDictionary в iPhone SDK?
  • Перемещение фигуры Stick, опорных точек, анимации или чего-то еще ...?
  • Лучший способ заставить NSRunLoop ждать установки флага?
  • Interesting Posts
    Давайте будем гением компьютера.