ios - Gesture Recognizer Not Called -


i have set gesture recognizer dismissing keyboard when user taps outside textfield. dismisskeyboard function not called.

have set observer wrong or different issue? also, tableview being tapped.

code excerpt

class commentsviewcontroller: uiviewcontroller, uitableviewdelegate, uitableviewdatasource {     override func viewdidappear(animated: bool) {         super.viewdidappear(animated)         nsnotificationcenter.defaultcenter().addobserver(self,             selector: selector("keyboardwillshow:"),             name: uikeyboardwillshownotification,             object: nil)         nsnotificationcenter.defaultcenter().addobserver(self,             selector: selector("keyboardwillhide:"),             name: uikeyboardwillhidenotification,             object: nil)     }      func keyboardframechanged(notification: nsnotification) {         println("keyboardframechanged")         let userinfo = notification.userinfo         let key = uikeyboardframeenduserinfokey         if let info = userinfo {             let framevalue = info[key] as! nsvalue             let _frame = framevalue.cgrectvalue()         }     }      func keyboardwillshow(notification: nsnotification) {         if keyboarddismisstapgesture == nil         {             println("dismiss")             keyboarddismisstapgesture = uitapgesturerecognizer(target: self, action: selector("dismisskeyboard:"))             self.view.addgesturerecognizer(keyboarddismisstapgesture!)         }     }      func keyboardwillhide(notification: nsnotification) {         if keyboarddismisstapgesture != nil         {             println("test2")             self.view.removegesturerecognizer(keyboarddismisstapgesture!)             keyboarddismisstapgesture = nil         }     }      func dismisskeyboard(sender: anyobject) {         println("dismiss keyboard")         commenttextfield.resignfirstresponder()     } 

i set breakpoint @ dismisskeyboard, doesn't called.

output

when tap textview , keyboard opens, output

keyboardframechanged keyboardframechanged show dismiss 

when tap else (trying dismiss keyboard), no further outputs.

set gesture recognizer delegate , add uigesturerecognizerdelegate protocol.

func keyboardwillshow(notification: nsnotification) {     if keyboarddismisstapgesture == nil     {         println("dismiss")         keyboarddismisstapgesture = uitapgesturerecognizer(target: view, action: "dismisskeyboard:")         keyboarddismisstapgesture.delegate = self         self.view.addgesturerecognizer(keyboarddismisstapgesture!)     } } 

then add:

func gesturerecognizer(gesturerecognizer: uigesturerecognizer, shouldrecognizesimultaneouslywithgesturerecognizer othergesturerecognizer: uigesturerecognizer) -> bool {      return true  } 

my guess is, gesture of table view interfering new uitapgesture. try solution or else should fail gesture of table view when new uitapgesture detected.

to fail uitapgesturerecognizer of table view use code:

if let recognizers = yourtableview.gesturerecognizers, let index = find(recognizers.map { $0 uitapgesturerecognizer }, true) {     (recognizers[index] as! uipangesturerecognizer).requiregesturerecognizertofail(keyboarddismisstapgesture) } 

maybe not elegant way of doing it, works me when want fail uipangesturerecognizer. haven't tested uitapgesturerecognizer.

edit:

if let recognizers = yourtableview.gesturerecognizers, let index = find(recognizers.map { $0 uigesturerecognizer }, true) {     (recognizers[index] as! uigesturerecognizer).requiregesturerecognizertofail(keyboarddismisstapgesture!) } 

Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -