2015-12-01 2 views
7

Я пытаюсь создать всплывающее окно, и когда я представляю контроллер представления, фон всегда сплошной черный, а размер - полный.Как представить PopOver в iOS9

Я не могу показаться, чтобы выяснить, что случилось, и вот код, который я имею

@IBAction func distancePopOver(sender : UIBarButtonItem){ 

    //a UIViewController that I created in the storyboard 
    let controller = storyboard!.instantiateViewControllerWithIdentifier("distancePopOver") 
    controller.modalPresentationStyle= UIModalPresentationSTyle.PopOver 
    controller.preferredContentSize = CGSizeMake(200,30) 
    self.presentViewController(controller, animated: true, completion: nil) 

    //Configure the Popover presentation controller 
    let popController = (controller.popoverPresentationController)! 
    popController.permittedArrowDirections = UIPopoverArrowDirection.Down 
    popController.barButtonItem = sender 
    popController.delegate = self 
    } 

Всякий раз, когда я нажимаю на UIBarButtonItem, она представляет вид на весь экран, но она не должна быть размер, указанный в строке 5?

ответ

1

Попутчики сейчас довольно искусно. Во-первых, вы захотите настроить popoverPresentationController перед тем, как представить его.

Во-вторых, убедитесь, что направление стрелки указывает, как стрелка указывает, а не где содержимое соответствует UIBarButtonItem. Итак, если его внутри UIToolbar (и находится около нижней части экрана), вам нужно будет .Down, иначе, если его панель навигации (вверху) вы хотите использовать .Up.

@IBAction func distancePopOver(sender : UIBarButtonItem){ 

    //Configure the Popover presentation controller 
    let popController = (controller.popoverPresentationController)! 
    popController.permittedArrowDirections = .Down // .Up 
    popController.barButtonItem = sender 
    popController.delegate = self 

    //a UIViewController that I created in the storyboard 
    let controller = storyboard!.instantiateViewControllerWithIdentifier("distancePopOver") 
    controller.modalPresentationStyle = .Popover 
    controller.preferredContentSize = CGSizeMake(200,30) 

    presentViewController(controller, animated: true, completion: nil) 
} 

Теперь, если вы получили это далеко, и его до сих пор не работает, потому что его поведение по умолчанию поповер в компактном классе размер, чтобы заполнить экран. Поскольку вы уже устанавливаете свой контроллер представлений в качестве делегата popover, вам просто нужно реализовать эту функцию делегата: adaptivePresentationStyleForPresentationController(_:traitCollection:) и вернуть .None для стиля презентации. Это позволит вам даже показать реальный вид на iPhone. См. Мой блог: iPhone Popover для полного примера этого.

+1

Последний бит с adaptivePresentationStyleForPresentationController (_: traitCollection :) сделал это для меня. Спасибо –

+0

Его работа хорошая в iPad, но не в iPhone. – Satyam

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