Быстрое продолжение потока в TableView (didSelectRowAt IndexPath) после представления контроллера предупреждений

Я хочу представить UIAlertController, когда пользователь нажимает строку в tableView, когда condition не равно 1. После отклонения предупреждения я хочу, чтобы оставшийся код в didSelectRowAt IndexPath выполнялся. Однако поток останавливается. Я предполагаю, что мне нужно что-то другое, кроме nil в completion:, но я в тупике.

Я представляю контроллер предупреждений так:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if condition != 1 {
        let alertController = UIAlertController(title: "Title", message: "message", preferredStyle: .alert)

        let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        alertController.addAction(defaultAction)
        present(alertController, animated: true, completion: nil)
        condition = 1
    }

    \\remaining code to be executed
}

person froggomad    schedule 19.08.2018    source источник
comment
Напишите оставшийся код в обработчике действия предупреждения.   -  person Adeel    schedule 19.08.2018


Ответы (1)


Вы можете поместить код для выполнения в обработчик действия defaultAction. Таким образом, код будет выполнен после нажатия кнопки ok. Если вы поместите его в завершение метода present(), он будет выполнен сразу после того, как будет представлено предупреждение.

let alert = UIAlertController(title: "Hello", message: "Nai", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
        print("Executed after ok tapped")
    }))
    present(alert, animated: true) {
        print("Executed when its presented")
    }
person JAHID HASAN POLASH    schedule 19.08.2018
comment
СПАСИБО! Я пытался обернуть код в функцию и вызвать его таким образом, но у меня его не было в корпусе... - person froggomad; 20.08.2018