iOS 弹出窗口阻止调用按钮

iOS Popover blocking calling button

在 Xcode 9.3 我正在使用故事板创建一个 iPad UI.On 一个 UIButton 的点击,一个 Popover segue 被称为显示一个 TableViewController。 TableView 被调用并显示出来,并按预期被关闭。 但是,无论我在 Segue 的属性检查器上选中什么锚复选框,弹出窗口表视图都会显示在调用 segue 的按钮前面。我希望它从右侧弹出,但它似乎总是从 UIButton 的左侧弹出。

也许我遗漏了什么,如果有任何提示,我将不胜感激。 提前致谢。

好吧,经过多次研究和反复试验,我发现了如何去做... 看起来 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。在主视图上只会出现这种 segue,弹出窗口将从 3 个不同的按钮调用,这些按钮用不同的数据填充 TableView。如果主视图有不同的 segues 或 popovers,整个代码应该位于

if segue.identifier=="popOverSegueID"{ ... }

我只是按照我展示的那样做了,以避免复制粘贴代码。

希望对您有所帮助。