嗯,经过多次研究和试验;错误,我找到了怎么做。。。
因此,Popover视图必须具有调用它的项的CGRect。因此,没有办法避免代码这样做。
有多种方法可以做到这一点,可以通过按钮以编程方式调用segue,也可以通过
prepareForSegue
作用我选择后一种方式,如下所示:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let popOver=segue.destination as? DataSelectionTableViewController, let temporaryButton=sender as? UIButton else {
return
}
popOver.popoverPresentationController?.delegate = self
popOver.popoverPresentationController?.sourceView = temporaryButton
popOver.popoverPresentationController?.sourceRect = temporaryButton.bounds
if segue.identifier=="popOverSegueID"{
popOver.dataArray=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
}
在上面的代码片段中,PopOver视图是TableViewController。在主视图上,将只显示这种序列,并且将从3个不同的按钮调用popover,用不同的数据填充TableView。如果主视图具有不同的segue或popover,则整个代码应位于
if segue.identifier=="popOverSegueID"{ ... }
我只是按照我展示的那样做,以避免复制粘贴代码。
我希望这有帮助。