代码之家  ›  专栏  ›  技术社区  ›  Marcal

iOS Popover阻止呼叫按钮

  •  -1
  • Marcal  · 技术社区  · 6 年前

    在Xcode 9.3上,我使用故事板创建iPad UI。轻触UI按钮,将调用Popover segue以显示TableViewController。 调用TableView后,它会显示出来,并按预期解除。 然而,无论我在Segue的属性检查器上选中什么锚定复选框,popover表视图都会显示在调用Segue的按钮的正前方。我希望它从右侧弹出,但它似乎总是从ui按钮的左侧弹出。

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

    Before

    After

    1 回复  |  直到 6 年前
        1
  •  0
  •   Marcal    6 年前

    嗯,经过多次研究和试验;错误,我找到了怎么做。。。 因此,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"{ ... }
    

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

    我希望这有帮助。