popoverController没有连接

时间:2017-03-23 19:00:28

标签: swift segue popover

您好我有一个显示数组的弹出窗口视图。我想知道是否有一种方法可以以某种方式判断选择了阵列中的哪个项目。

 @IBAction func popOverButton(_ sender: UIButton)
{

    let controller = TableViewController()
    //This is just a regular tableViewController nothing special
     controller.modalPresentationStyle = .popover
    // configure the Popover presentation controller
    let popController: UIPopoverPresentationController? = controller.popoverPresentationController
    popController?.permittedArrowDirections = [.down]
    popController?.delegate = self
    popController?.sourceView = sender
    popController?.sourceRect = sender.bounds
    popController?.backgroundColor = .white
    self.parent?.present(controller, animated: true, completion: { })

}

Here is what it looks like

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

最简单的方法是创建一个委托,当选择一个单元格时,将选择权传递回呈现视图控制器。然后设置UITableViewDelegate方法didSelectRowAtIndexPath以调用委托方法。像这样:

@protocol  PopoverOptionSelectionDelegate {
    func itemSelected(item:String);
}

在演示VC中实施该方法

class PresnetingViewController, PopoverOptionSelectionDelegate {

    @IBAction func popOverButton(_ sender: UIButton) {
        let controller = TableViewController()
        controller.delegate = self //----Important---//
        //This is just a regular tableViewController nothing special
        controller.modalPresentationStyle = .popover
        // configure the Popover presentation controller
        let popController: UIPopoverPresentationController? = 
        controller.popoverPresentationController
        popController?.permittedArrowDirections = [.down]
        popController?.delegate = self
        popController?.sourceView = sender
        popController?.sourceRect = sender.bounds
        popController?.backgroundColor = .white
        self.parent?.present(controller, animated: true, completion: { })
    }

    func itemSelected(item:String) {

        //DISMISS YOUR POPOVER MAYBE AND DO SOMETHING WITH "ITEM" HERE
    }

}

class TableViewController,UITableViewDelegate {
    weak var delegate:PopoverOptionSelectionDelegate?

   func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        delegate?.itemSelected(self.itemsArray[indexPath.row])
   }
}