PopoverPresentationController以零结尾

时间:2017-06-21 03:17:25

标签: ios swift storyboard uipopovercontroller uipopover

创建了一个SingleViewApplication,我已经放了一个按钮。

现在点击按钮我需要将tableView显示为popover。 TableViewController是在xib中创建的。

问题是tableViewController.popoverPresentationController始终为零,参见下面的代码

     let filterVC =  TableViewController(nibName: "TableViewController", bundle: nil)
    var filterDistanceViewController = UINavigationController(rootViewController: filterVC)
    filterDistanceViewController.preferredContentSize = CGSize(width: 300, height: 200)
    let popoverPresentationViewController = filterDistanceViewController.popoverPresentationController
    popoverPresentationViewController?.permittedArrowDirections = .any


    if let pop = filterDistanceViewController.popoverPresentationController {
        pop.delegate = self
    }

在上面的代码中 filterDistanceViewController.popoverPresentationController始终为零

任何正确方向的提示都将受到高度赞赏。

3 个答案:

答案 0 :(得分:6)

在您的VC上设置modalPresentationStyle之前,popoverPresentationController属性将为nil。确保在访问之前设置modalPresentationStyle

答案 1 :(得分:1)

您没有提供任何内容,因此您需要在当前的viewcontroller上显示popoverPresentationViewController,例如:

@IBAction func importantButtonPressed(_ sender: UIButton) {
         let tableViewController = UITableViewController()
         tableViewController.modalPresentationStyle = .popover

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

        if let pop = tableViewController.popoverPresentationController {
          pop.delegate = self
        }

    }

答案 2 :(得分:1)

您可以在下面进行操作。

@IBAction func popoverBtnPressed(_ sender: Any) {

    let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2")
    vc2.modalPresentationStyle = .popover
    vc2.popoverPresentationController?.delegate = self
    vc2.popoverPresentationController?.barButtonItem = popoverBtn
    vc2.popoverPresentationController?.sourceRect = .zero
    present(vc2, animated: true, completion: nil)
}