Проверьте, отклонен ли лист действий UIAlertController с помощью кнопки отмены? - PullRequest
2 голосов
/ 12 июня 2019

Я реализовал лист действий через контроллер предупреждений.Я хочу отобразить кнопку типа кнопки отмены с надписью «Оплатить».

Проблема в makeCall() вызове функции, когда нажата кнопка оплаты, и когда нажата остальная часть экрана makeCall() функция вызывается снова.

Как определить, что действие вызывается черездействие кнопки оплаты или через Tapp на остальной части экрана?Я только хочу позвонить в функцию makeCall(), когда нажата кнопка оплаты.

alertController = UIAlertController(title: "", message: nil, preferredStyle: .actionSheet)    

let cancelAction = UIAlertAction(title: "Pay", style: .cancel) { (UIAlertAction) in
    printLog("cancelAction")
    makeCall()
}

cancelAction.isEnabled = false
alertController.addAction(cancelAction)

self.present(alertController, animated: true) {}

enter image description here

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Здесь, контроллер оповещений может отключить просмотр userInteraction, поэтому, когда касание снаружи контроллера оповещений не закрыто.

Вы можете сделать так:

self.present(alertController, animated: true){
    if let mainView = alertController.view.superview?.subviews[0]{
           mainView.isUserInteractionEnabled = false
     }
}

ИЛИ

self.present(alertController, animated: true) {
   if let allContainerView = alertController.view.superview?.subviews{
       for myview in allContainerView{
           if (myview.gestureRecognizers != nil){
                 myview.isUserInteractionEnabled = false
           }
       }
    }
 }

Надеюсь, это сработает для вас.

0 голосов
/ 12 июня 2019

Я не нахожу никакого решения о том, как определить, что действие вызывается с помощью действия кнопки оплаты или с помощью нажатия на остальную часть экрана.

но альтернативным решением является то, что вы add tap gesture on rest view. Таким образом, вы можете определить, что если отменить нажатие кнопки или нажмите в остальной части экрана.

alertController = UIAlertController(title: "", message: nil, preferredStyle: .actionSheet)

            let cancelAction = UIAlertAction(title: "Pay", style: .cancel) { (UIAlertAction) in
                printLog("cancelAction")
                makeCall()
            }

            alertController.addAction(cancelAction)

            self.present(alertController, animated: true) {
                let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissAlertController))
                alertController.view.superview?.subviews[0].addGestureRecognizer(tapGesture)
            }


@objc func dismissAlertController(){
        self.dismiss(animated: true, completion: nil)
        print("through Tap on rest of the screen")
    }
...