iOSiOS-swiftSwift Dev

swift 2.0 UIGestureRecognizer 添加

2015-10-14  本文已影响2031人  x1911

TableView写了一个登陆界面,帐号和密码两个Cell中加入了TextField。由于想在TableView的空白处点击时收起键盘,所以注册了一个UITapGestureRecognizer来识别手势。

但这时候 tableView didSelectRowAtIndexPath不执行了。


    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print ("你点不到我")
    }

目测原因是UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应

查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中的

gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool


    //MARK: 重写手势让tableview能点击
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
        if NSStringFromClass(touch.view!.classForCoder) == "UITableViewCellContentView"{
            return false
        }
        return true
    }

当然不要忘记在class中引用 UIGestureRecognizerDelegate

class viewController: ...,UIGestureRecognizerDelegate

和 tapGesture.delegate=self


    //MARK:- 点击外部关键盘
    func touchOutsideTextField(){
        let aSelector : Selector = "closeKeyboard"
        let tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
        tapGesture.delegate=self
        tapGesture.numberOfTapsRequired = 1
        view.addGestureRecognizer(tapGesture)
    }
    func closeKeyboard(){
        self.view.endEditing(true)
    }

有什么问题欢迎留言

上一篇下一篇

猜你喜欢

热点阅读