我正在使用ios swift
应用,我在我的应用中介绍了摇动手势的处理方式。除了一个面板,我想处理应用程序周围的摇晃。在这个特定的面板上,我想调用一个完全不同的功能。所以首先我写了一个UIViewController的扩展,以便在其他地方支持摇动手势:
extension UIViewController:MotionDelegate {
override public func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
if motion == .MotionShake {
print("I'm in extension")
self.showAlertMessage("", message: "I'm in extension") //this invokes an alert message
}
}
}
然后在我想要处理它的面板中我写道:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
if motion == .MotionShake {
showAlertMsg("Yes!", message: "This is some random msg")
}
}
现在问题如下:
当我在屏幕上摇动我希望表现不同的手机时 - 我会看到带有消息this is some random msg
的警报消息。但是当屏幕上出现此屏幕(并且它会持续几秒钟)并再次摇动手机时 - 突然显示弹出窗口I'm in extension
。我想避免显示第二个弹出窗口。问题是当前面有弹出的第一条消息时,它无法识别我的覆盖方法。在其他情况下(没有弹出窗口时)一切正常。这是我的showAlertMsg
函数:
func showAlertMsg(title: String, message: String, delay: Double){
let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
self.presentViewController(alertController, animated: true, completion: nil)
let delay = delay * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
alertController.dismissViewControllerAnimated(true, completion: nil)
})
}
有什么办法可以避免在从主控制器显示弹出窗口时显示弹出窗口吗?
答案 0 :(得分:2)
因为您在面板中覆盖了UIViewController
的扩展名。
然后你出现UIAlertController
,它没有覆盖方法。
你可以做的是为UIAlertController
做一个扩展并处理这个功能。