UITapGesture在UITableView的头(UITapGesture in UITable

2019-10-22 09:40发布

我试图在迅速使用扩张的tableview。 所以我加入的Gesture在tableview中,以头,但并不认识。 请指导我。 刚刚越过检查我的编码。

我的编码如下:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        let vvv = tableView.headerViewForSection(section)

        let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
        tap.delegate = self
        vvv?.addGestureRecognizer(tap)
        return vvv
    }


    func handleTap(gestureRecognizer: UITapGestureRecognizer)
    {
        if(gestureRecognizer.state == .Ended)
        {
            println("SECTION PRESSED") //NOT ENTERING TO THIS BLOCK
        }     
    }

Answer 1:

在斯威夫特4您可以将UITapGestureRecognizer添加到头的观点:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let headerView = UIView()

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(headerTap))
    headerView.addGestureRecognizer(tapRecognizer)

    return headerView
}

@objc func headerTap() {
    // Tap action
}


Answer 2:

我就是这么做的。

首先,做一个UITableViewCell类,以“headerCellSection”变量(或任何你想将它命名为此事)。

import UIKit

class HeaderCellTableViewCell: UITableViewCell {

    var headerCellSection:Int?

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
}

添加单元格“viewForHeaderInSection”:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerCell = tableView.dequeueReusableCellWithIdentifier("headerCell") as! HeaderCellTableViewCell

        return headerCell
    }

发送小区的部分先前声明的变量和点击手势识别器添加到该小区。 代码应该是这个样子:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerCell = tableView.dequeueReusableCellWithIdentifier("headerCell") as! HeaderCellTableViewCell

        // Send section
        headerCell.headerCellSection = section

        // Add gesture
        let headerTapGesture = UITapGestureRecognizer()
        headerTapGesture.addTarget(self, action: "myAction:")
        headerCell.addGestureRecognizer(headerTapGesture)

    return headerCell
}

然后添加动作。 在操作,你可以访问具有点击手势目标的看法。 在那里,你可以访问之旅“headerCellSection”值,瞧!

func myAction (sender: UITapGestureRecognizer) {

    // Get the view
    let senderView = sender.view as! HeaderCellTableViewCell

    // Get the section
    let section = senderView.headerCellSection

    print(section)
}


Answer 3:

我加入了这样做是UITapGestureRecognizercontentView的headerView的。 例:

headerCell.contentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(headerTapped)))



Answer 4:

我知道这是一个有点老问题给予回答。 但没有被接受的答案,我会给另一个简单的解决方案。

我读了原来的问题后,我以为笔者不想自定义创建节头。 这就是为什么他试图用下面的代码。

let vvv = tableView.headerViewForSection(section)

但我敢肯定你会得到一个空值在上面的代码片断VVV。 如果用户想要访问的默认视图,他可以如下做到这一点。

tableView.register(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: sectionHeaderIdentifier)

以上报名,我没有在我的viewDidLoad()函数。 然后使用下面的代码

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let sectionView: UITableViewHeaderFooterView = tableView.dequeueReusableHeaderFooterView(withIdentifier: sectionHeaderIdentifier)!
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(sectionHeaderTapped))
    sectionView.addGestureRecognizer(tapGesture)

    return sectionView
}

上述功能将创建启用了双击手势属性表格节头的默认视图。



文章来源: UITapGesture in UITableview header