2011-01-22 4 views
34

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

alt text


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

+1

@Kev Вы закрываете мой вопрос, потому что это не настоящий вопрос? После 12439 просмотров? и много комментариев/ответов? Это так странно, как вопрос? Maahh. – elp

+5

По-моему, это совершенно правильный вопрос. –

+0

Спасибо за ссылку !!! –

ответ

21

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

+0

Спасибо. Знаете ли вы, что если использование WEPopover в моем приложении нормально, если я хочу поместить его в магазин? – Luke47

+0

Должно быть. Я не знаю деталей, так как коллега выполнил эту задачу, но у нас есть модифицированная версия этого приложения. – clozach

+0

[Сурагский ответ ниже] (http://stackoverflow.com/a/32295907/4106164) теперь является стандартным способом сделать это после iOS 8. – Gordonium

19

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

+1

uhm ... как я могу его реализовать?PS: скриншот выше - это приложение iphone! – elp

+0

@Paska: какое приложение для iphone это? Мне любопытно – user102008

+0

@ user102008 Я не помню, но это вид с закругленным углом и изображением стрелки! Ничего простого! – elp

0

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

5

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

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

7

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

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

+1

Это не работает с 'UIBarButtonItems' (в моем ограниченном опыте в любом случае) – Matthew

+2

Также имеется много проблем с памятью. – jjxtra

26

IOS 8, а затем

Начиная с прошивкой 8, вы можете использовать UIPopoverPresentationController для iPhone'ов в дополнение к IPADS.

enter image description here

Настройка

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

enter image description here

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

enter image description here

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

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. См. this answer.

enter image description here

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

В приведенном выше примере происходит в основном из первого звена.

+3

Это должен быть принятый ответ. – Crashalot

0

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

  1. Выполните действия, описанные в Suragch ответ выше (в редакции Сообщества.)
  2. Не осуществлять SEGUE, как показано в ответ выше. По какой-то причине segue заставляет popover идти в полноэкранном режиме, несмотря на то, что он задает явный размер.
  3. Дайте вашему диспетчеру просмотра popup заголовок в Attributes Inspector
  4. Добавьте следующий код в контроллер TableView, где будет отображаться всплывающее окно.
  5. Изменить идентификатор строки (один здесь, ссылающийся на файл Constant.swift)
  6. Modify «как! 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 
    } 
    

 Смежные вопросы

  • Нет связанных вопросов^_^