在Xcode 9.3上,我正在使用故事板来创建一个iPad UI。在UIButton的点击中,一个名为Popover segue的人被称为出现一个TableViewController。 调用TableView并显示它并按预期被解雇。 但是,无论我在Segue的Attributes Inspector上检查什么Anchor复选框,popover tableview都会显示在调用segue的按钮前面。我希望它从右侧弹出,但似乎总是从UIButton的左侧弹出。
也许我错过了什么,我会感激任何提示。 提前谢谢。
答案 0 :(得分:0)
好吧,经过多次研究和试验&错误,我发现了怎么做... 看来,Popover视图必须具有调用它的项目的CGRect。所以没有办法避免代码这样做。
要做到这一点,要么通过编程方式从按钮调用segue,要么通过prepareForSegue
函数调用segue。我之所以选择如下:
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。在主视图中只会出现这种segue,并且将从3个不同的按钮调用popover,这些按钮用不同的数据填充TableView。如果主视图具有不同的segue或popovers,则整个代码应位于
内if segue.identifier=="popOverSegueID"{ ... }
我就像我展示的那样,以避免复制粘贴代码。
我希望它有所帮助。