2017-06-21 58 views
0

创建一个SingleViewApplication,我已经放置了一个按钮。PopoverPresentationController作为零

现在点击按钮我需要显示一个tableView作为弹出窗口。 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总是来作为零

在正确的方向的任何暗示将高度赞赏。

+0

你是否在界面生成器上将你的VC设置为root?通过检查使箭头出现的框来指示哪一个是您的根视图控制器。 – Pochi

+0

放置按钮的ViewCtr是rootviewCtr。我是否需要将TableVC作为rootVC? – Ekra

回答

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 
     } 

    } 
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) 
} 
0

,直到你设置你的VC一个modalPresentationStyle,该popoverPresentationController属性为nil。确保在访问之前设置modalPresentationStyle