检查UIAlertController操作表是否通过取消按钮关闭?

时间:2019-06-12 10:11:50

标签: ios swift uialertview uialertcontroller uiactionsheet

我已经通过警报控制器实施了操作表。我想显示带有取消按钮的按钮,上面写有“ Pay”文本。

单击“支付”按钮,然后点击屏幕的其余部分,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 个答案:

答案 0 :(得分:1)

在此处,警报控制器视图userInteraction禁用,因此,当点击外部警报控制器时,不会关闭。

您可以这样做:

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

OR

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

我希望它对您有用。

答案 1 :(得分:0)

我找不到任何解决方案,该解决方案如何确定您是通过“付款”按钮操作还是通过点击屏幕其余部分上的点击来调用该操作的。

,但是替代解决方案是您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")
    }