2016-04-20 66 views
0

我正在處理一個ios swift應用程序,我正在介紹處理我的應用程序中的抖動手勢。除了一個面板之外,我想處理應用程序周圍的晃動。在這個特定的面板上,我想調用一個完全不同的功能。所以,首先我寫了一個擴展的UIViewController,這樣搖晃手勢支持其他任何地方:爲什麼我不能在另一個UIViewController中重寫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") 
    } 
} 

現在的問題如下所示:

當我在屏幕上搖動手機時,我想表現出不同的行爲 - 我看到警報消息012g。但是當這個屏幕出現在屏幕上(它會持續幾秒鐘),然後我再次搖動手機 - 突然顯示彈出框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) 
    }) 

} 

有什麼我可以做,以避免顯示從擴展彈出,同時從主控制器顯示彈出?

回答

2

因爲您在面板中覆蓋了UIViewController的擴展名。 然後你提出UIAlertController,它沒有重寫方法。 你可能要做的是擴展UIAlertController並處理這個功能。

相關問題