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

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

alt text


EDIT: это лучший момент: https://github.com/runway20/PopoverView enter image description here

Ответ 1

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

Ответ 2

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

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

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

Настройка

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

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

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

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

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

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

Код

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

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. Подробнее см. этот ответ.

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 7

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

Ответ 8

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

  • Следуйте инструкциям в Suragch выше (как отредактировано сообществом.)
  • Не используйте Segue, как показано в ответе выше. По какой-то причине segue приводит к тому, что popover переходит в полноэкранный режим, несмотря на то, что он задает явный размер.
  • Дайте вашему контроллеру просмотра popup заголовок в Инспекторе атрибутов
  • Добавьте следующий код в контроллер TableView, где будет отображаться всплывающее окно.
  • Измените строковый идентификатор (тот, который здесь ссылается на файл Constant.swift)
  • Измените "как! FilterVC", чтобы использовать заголовок вашего контроллера просмотра popover.

    /// 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
    }