停止任务,直到AlertController操作发生Swift

时间:2016-06-27 19:42:35

标签: ios xcode swift swift3 xcode8

我尝试从completion的{​​{1}}参数执行任务,以便只有在present关闭后才能执行所需的功能。但是,在警报中执行操作之前调用了该函数。在采取行动之前,我该如何等待执行该功能?

UIAlertController

2 个答案:

答案 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
        }
    }
}