всплывающее меню 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
  • Есть ли iPhone SDK API для твиттера?
  • NSArray слабых ссылок (__unsafe_unretained) для объектов под ARC
  • Что делает @synthesize window = _window?
  • Понимание подсчета ссылок с помощью Cocoa и Objective-C
  • Полноэкранный UIView со строкой состояния и наложением панели навигации наверху
  • UIImage для base64 Кодирование строк
  • Интеграция CFNetwork и Bonjour для интеграции iPhone и Mac
  • Использование аутентификации AFNetworking и HTTP
  • UITextView с подсветкой синтаксиса
  • UIScrollView - показывает полосу прокрутки
  • Interesting Posts

    Как конвертировать HTML в PDF с помощью iTextSharp

    Swift readonly external, внутреннее свойство readwrite

    Лучший способ создать ключи AES, чем посев SecureRandom

    Назначить инициированный код нескольким изображениям – Excel VBA

    Запустить программу как admin без ввода учетных данных? (Автоматическая высота Win7)

    Разрешение неподписанных Java-приложений на всех сайтах

    Музыкальный проигрыватель на Linux без плейлистов, просто просмотр каталога и воспроизведение файлов

    Как работает шаблон прерывания LMAX?

    Вредоносные диалоги «подтвердить навигацию»?

    Как найти сборку / версию Windows 10

    size_t всегда без знака?

    Как работает Google Instant?

    Каков наилучший способ автоматического обновления приложения Windows?

    Во время установки Windows он считает, что раздел EFI не находится в fat32, но он находится в fat32

    Как использовать пользовательскую сериализацию или десериализацию в WCF, чтобы принудительно создать новый экземпляр для каждого свойства datacontact?

    Давайте будем гением компьютера.