2016-12-27 10 views
4

В Swift я пытаюсь показать popover из пункта кнопки панели, находящегося в верхнем правом положении панели навигации. Ниже приводится мой код:Показ переполнения от кнопки «Бар» в навигационной панели в iPhone

func showOptions(sender: UIBarButtonItem) { 
    let optionsVC = OptionsViewController(nibName: "OptionsViewController", bundle: nil) 
    optionsVC.delegate = self 
    optionsVC.modalPresentationStyle = .popover 
    optionsVC.preferredContentSize = CGSize(width: 200, height: 200) 

    present(optionsVC, animated: true, completion: nil) 

    let popController = optionsVC.popoverPresentationController 
    popController?.permittedArrowDirections = .up 
    popController?.delegate = self 
    popController?.barButtonItem = sender 
} 

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { 
    return .none 
} 

Его работа хорошая в iPad, а не в iPhone. Я просмотрел документацию и различные веб-страницы. Кажется, все правильно. Что не хватает в моем коде?

ответ

6

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

let popController = optionsVC.popoverPresentationController 
popController?.permittedArrowDirections = .up 
popController?.delegate = self 
popController?.barButtonItem = sender 

present(optionsVC, animated: true, completion: nil) 
+0

Большое спасибо. Многие из блогов показывают, как я реализовал. – Satyam