【问题标题】:PopoverPresentationController coming as nilPopoverPresentationController 为 nil
【发布时间】:2017-06-21 03:17:25
【问题描述】:

在我放置了一个按钮的地方创建了一个 SingleViewApplication。

现在单击按钮,我需要将 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 总是为零

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

【问题讨论】:

  • 您是否在 Interface Builder 上将您的 VC 设置为 root?通过选中使箭头出现的框,指示哪个是您的根视图控制器。
  • 放置按钮的 ViewCtr 是 rootviewCtr。我需要将 TableVC 作为 rootVC 吗?

标签: ios swift storyboard uipopovercontroller uipopover


【解决方案1】:

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

【讨论】:

  • 且样式必须为Popover
  • .popover 你的意思是?
  • 哦对了,我现在用的是xamarin,所以习惯了大写形式。
  • 太棒了!我喜欢蹩脚的苹果设计他们的 API。
【解决方案2】:

你没有呈现任何东西,所以你需要在当前的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
        }

    }

【讨论】:

    【解决方案3】:

    你可以像下面那样做。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多