我已经通过警报控制器实施了操作表。我想显示带有取消按钮的按钮,上面写有“ 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) {}
答案 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")
}