iOS Popover阻止调用按钮

时间:2018-05-04 15:18:34

标签: ios xcode popover uistoryboardsegue

在Xcode 9.3上,我正在使用故事板来创建一个iPad UI。在UIButton的点击中,一个名为Popover segue的人被称为出现一个TableViewController。 调用TableView并显示它并按预期被解雇。 但是,无论我在Segue的Attributes Inspector上检查什么Anchor复选框,popover tableview都会显示在调用segue的按钮前面。我希望它从右侧弹出,但似乎总是从UIButton的左侧弹出。

也许我错过了什么,我会感激任何提示。 提前谢谢。

Before

After

1 个答案:

答案 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"{ ... }

我就像我展示的那样,以避免复制粘贴代码。

我希望它有所帮助。