iPhone всплывающее меню, как iPad popover? - PullRequest
34 голосов
/ 22 января 2011

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

alt text


РЕДАКТИРОВАТЬ : Это лучшее вмомент: https://github.com/runway20/PopoverView enter image description here

Ответы [ 8 ]

29 голосов
/ 30 августа 2015

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

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

enter image description here

Настройка

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

enter image description here

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

enter image description here

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

enter image description here

Код

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

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

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

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

enter image description here

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

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

21 голосов
/ 24 февраля 2011

Посмотрите на реализацию iPhone UIPopoverController: WEPopover

19 голосов
/ 22 января 2011

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

7 голосов
/ 16 июля 2012

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

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

5 голосов
/ 22 января 2011

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

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

1 голос
/ 01 октября 2017

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

  1. Выполните шаги, описанные в ответе Suragch выше (отредактировано Сообществом.)
  2. Не используйте Segue, как показано в ответе выше.По какой-то причине в результате перехода всплывающее окно переходит в полноэкранный режим, несмотря на задание явного размера.
  3. Дайте вашему контроллеру представления поповера заголовок в Инспекторе атрибутов
  4. Добавьте следующий код в контроллер TableViewпоявится всплывающее окно.
  5. Измените строковый идентификатор (здесь указывается файл Constant.swift)
  6. Измените "as! FilterVC", чтобы использовать заголовок вашего всплывающего окнаконтроллер вида.

    /// 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
    }
    
1 голос
/ 17 ноября 2014

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

0 голосов
/ 22 января 2011

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

...