Как я могу реализовать это всплывающее меню в приложении iphone, как popover в ipad?
EDIT: это лучший момент: https://github.com/runway20/PopoverView
Как я могу реализовать это всплывающее меню в приложении iphone, как popover в ipad?
EDIT: это лучший момент: https://github.com/runway20/PopoverView
Взгляните на реализацию iPhone UIPopoverController: WEPopover
Начиная с iOS 8, вы можете использовать UIPopoverPresentationController
для iPhones в дополнение к iPads.
UIBarButtonItem
в свой основной контроллер просмотра.UILabel
. Если вы хотите создать целые меню, просто добавьте представление таблицы или список кнопок.show
выберите Present as Popover
.popoverSegue
(или любую строку, которую вы назвали в коде).Это код для главного контроллера представления, в котором есть элемент кнопки панели.
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
. Подробнее см. этот ответ.
Вышеприведенный пример представлен в основном из первой ссылки.
На iPhone вы обычно используете UIActionSheet для набора таких кнопок. Он скользит снизу вверх, а не появляется рядом с кнопкой, но это стандартное поведение на iPhone.
Есть один, который даже лучше, чем WEPopover. Разработанная компанией под названием 50pixels, она называется FPPopover.
Вы можете скачать FPPopover в https://github.com/50pixels/FPPopover
Вам нужно вручную создать экземпляр UIView с использованием пользовательского фонового изображения или чертежа с прозрачностью, добавить некоторые UIButtons (или другой тип пользовательского представления) сверху, а также каким-то образом обработать все касания вне этого представления.
Обратите внимание, что это нестандартный интерфейс. Таблица действий будет более совместимой с HIG.
Вы можете проверить WYPopoverController: https://github.com/sammcewan/WYPopoverController
Снимок экрана выше не является списком UIActionSheet. Он выглядит как простой подкласс UIView с пользовательскими UIButtons поверх него. Итак, продолжайте и создайте подкласс в соответствии с вашими потребностями, а затем добавьте его в качестве подсмотра в ваше представление каждый раз, когда вам это нужно.
Чтобы получить всплывающее окно с элемента панели правой боковой панели на контроллере навигации, который является частью контроллера таблицы, следующее работало для меня для Swift 4 и Xcode 9.
Измените "как! 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
}