我试图在swift中使用expandable tableview。所以我在tableview中添加了Gesture标题,但它没有识别。请指导我。只需交叉检查我的编码。
我的编码如下:
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
}
}
答案 0 :(得分:3)
我是这样做的。
首先,使用" headerCellSection"创建一个UITableViewCell类。变量(或者你想要的任何变量)。
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
}
然后添加动作。在操作中,您可以访问具有点击手势目标的视图。在那里你可以访问tour" headerCellSection"价值和瞧!
func myAction (sender: UITapGestureRecognizer) {
// Get the view
let senderView = sender.view as! HeaderCellTableViewCell
// Get the section
let section = senderView.headerCellSection
print(section)
}
答案 1 :(得分:3)
在Swift 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
}
答案 2 :(得分:0)
我是通过将UITapGestureRecognizer
添加到headerView的contentView
来完成的。示例:
headerCell.contentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(headerTapped)))
答案 3 :(得分:0)
我知道要回答这个问题有点老了。但是,没有答案被接受,我将给出另一个简单的解决方案。
阅读原始问题后,我认为作者不希望使用自定义创建的节标题。这就是为什么他试图使用以下代码。
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
}
以上功能将为启用了轻击手势属性的表格节标题创建默认视图。