iOS Popover блокирует кнопку вызова - PullRequest
0 голосов
/ 04 мая 2018

В Xcode 9.3 я использую раскадровки для создания пользовательского интерфейса iPad. При нажатии кнопки UIB вызывается переход Popover, показывающий TableViewController. TableView вызывается, и он обнаруживается, и он отклоняется, как ожидалось. Однако, независимо от того, какой флажок Якорь я установил в Инспекторе Атрибутов Segue, табличное представление всплывающего окна отображается прямо перед кнопкой, вызывающей segue. Я хотел, чтобы он выскочил с правой стороны, но, кажется, он всплывает всегда с левой стороны UIButton.

Может быть, я что-то упустил, и я был бы признателен за любые подсказки. Заранее спасибо.

Before

After

1 Ответ

0 голосов
/ 10 мая 2018

Ну, после многих исследований и проб и ошибок я узнал, как это сделать ... Похоже, что представление 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 разных кнопок, заполняющих TableView различными данными. Если основной вид имеет разные сегменты или всплывающие окна, весь код должен находиться внутри

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

Я просто сделал это так, как показал, чтобы избежать копирования кода.

Надеюсь, это поможет.

...