我尝试从completion
的{{1}}参数执行任务,以便只有在present
关闭后才能执行所需的功能。但是,在警报中执行操作之前调用了该函数。在采取行动之前,我该如何等待执行该功能?
UIAlertController
答案 0 :(得分:1)
目前的问题是在向用户显示警报时调用cpuTurn
,而不是在用户按下“Okay”时调用self.present
。正如您在documentation here中看到的那样,cpuTurn
方法中的完成函数在演示完成后“执行”。此块没有返回值且不带参数。您可以为此参数指定nil “。为用户显示警报,第一个UIViewController显示“我已完成呈现警报”,然后运行crazyEightPlayed
功能。
您需要将代码放在UIAlertAction的处理程序中,您似乎已经拥有了该代码。您应该将cpuTurn调用移动到var elem = document.getElementById("provisioningPages");
if (elem != null) {
elem.addEventListener("load", loadStoredInforamtionOnToPage());
}
函数(或者至少从crazyEightPlayed调用cpuTurn)
答案 1 :(得分:0)
您可以尝试禁用具有互动功能的视图子视图。我会注意到那些子视图,然后只激活那些子视图。
斯威夫特2:
var disabledSubviews = [UIView]()
let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) in
for subview in disabledSubviews {
subview.userInteractionEnabled = true
}
}))
self.presentViewController(alert, animated: true) {
for subview in self.view.subviews {
if subview.userInteractionEnabled == true {
disabledSubviews.append(subview)
subview.userInteractionEnabled = false
}
}
}
斯威夫特3:
var disabledSubviews = [UIView]()
let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
for subview in disabledSubviews {
subview.isUserInteractionEnabled = true
}
}))
self.present(alert, animated: true) {
for subview in self.view.subviews {
if subview.isUserInteractionEnabled == true {
disabledSubviews.append(subview)
subview.isUserInteractionEnabled = false
}
}
}