UITestView背景下的UIGestureRecognizer [重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我目前正在创建一个带有自定义单元格的UITableView,以允许用户搜索其他用户。当表填充数据(用户名)时,它的效果很好。我检查是否在检测到水龙头时键盘是否可见,如果是,我将关闭键盘。如果未显示键盘,则会将其推送到包含用户配置文件的UIViewController。这是执行此操作的代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if(keyboardShowing) {

        dismissKeyboard()
        return

    }

    let userVC = UserController()
    let navViewController = tabBarController?.selectedViewController as? UINavigationController
    userVC.profileUserID = resultUsers[indexPath.row].userID
    navViewController?.pushViewController(userVC, animated: true)

}

但是,当只有一行时(例如,搜索返回一个用户),我希望能够在行外单击以允许用户关闭键盘。我尝试了以下方法:

let tableBGTap = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
self.userList.backgroundView?.addGestureRecognizer(tableBGTap)

但这不起作用。关于如何才能实现我想要的任何想法?简而言之:如果我的UITableView中的行数较少以填满整个屏幕,我希望能够点击行下方的“背景”。

ios swift uitableview uigesturerecognizer
2个回答
0
投票

原因是什么

self.userList.backgroundView?.addGestureRecognizer(tableBGTap)

因为backgroundViewnil而无法正常工作。因此,你应该做的是:

userList.backgroundView = UIView()
self.userList.backgroundView?.addGestureRecognizer(tableBGTap)

注意如果要为表视图设置背景颜色:

userList.backgroundColor = .red

将不再显示。作为解决方法,您可以为背景视图本身添加颜色:

userList.backgroundView = UIView()
userList.backgroundView?.backgroundColor = .red
userList.backgroundView?.addGestureRecognizer(tapper)

0
投票

尝试在viewdidload中执行以下代码

tapper = UITapGestureRecognizer(target: self, action: 
#selector(<your function to dismiss keyboard>))
tapper.cancelsTouchesInView = false
view.addGestureRecognizer(tapper)
© www.soinside.com 2019 - 2024. All rights reserved.