Nic*_*ico 3 uitableview ios swift
我有时会有一个标题部分(只有一个,因为我只有一个部分).我添加了一个手势(单击),如下所示:
let singleTap = UIShortTapGestureRecognizer(target: self, action: "singleTap:")
singleTap.numberOfTapsRequired = 1
singleTap.numberOfTouchesRequired = 1
tableView.headerViewForSection(0)?.addGestureRecognizer(singleTap)
Run Code Online (Sandbox Code Playgroud)
有用.问题是,当我的tableView只有几行时,如果我在最后一行(空白区域)下方点击,它也会触发手势.
怎么避免呢?我想的方法可能是检查水龙头的位置是否在标题的范围内,但我不知道该怎么做.
对于正常的行,它很容易,我只是使用tableView.indexPathForRowAtPoint(point: CGPoint)但是标题怎么样?
编辑:
看来我需要注册我的头,当我打电话得到的东西tableView.headerViewForSection(0),但问题是,我的头是一个UIView,而不是一个UITableViewHeaderFooterView或UITableViewCell所以我不能注册它(我想...).
它到目前为止工作,因为我也在表视图上添加了手势.
因此,当手势添加到整个tableView时,当我从手势获取视图时,我得到tableView而不是标题.
所以我所做的是使用其标签从tableView获取标题:
let header = tableView.viewWithTag(Tag.Header.rawValue)
Run Code Online (Sandbox Code Playgroud)
然后检查点击位置是否在标题视图中:
let location = sender.locationInView(sender.view)
if header!.pointInside(location, withEvent: nil) { ... }
Run Code Online (Sandbox Code Playgroud)
一种可能更好的方法是在viewController的mainView(tableView)上设置gestureRecognizer,并在gestureRecognizer的手势动作中检测tapped视图:
{
let singleTap = UIShortTapGestureRecognizer(target: self, action: "singleTap:")
singleTap.numberOfTapsRequired = 1
singleTap.numberOfTouchesRequired = 1
tableView.addGestureRecognizer(singleTap) // <--
}
...
@IBAction func singleTap(tapGestureRecognizer: UIShortTapGestureRecognizer) {
// detect the tapped view
var loc = tapGestureRecognizer.locationInView(self.tableView)
if (CGRectContainsPoint(tableView.headerViewForSection(0)?.frame, loc)) {
// header was tapped
...
}
}
Run Code Online (Sandbox Code Playgroud)
执行此操作的一个简单方法是,当表通知您(通过UITableViewDelegate)它将要显示标题时,只需附加侦听器:
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let singleTap = // setup gesture
// Add gesture to already created header
view.addGestureRecognizer(singleTap)
}
Run Code Online (Sandbox Code Playgroud)
然后你可以设置选择器功能:
func singleTap(gesture: UITapGestureRecognizer) {
let headerView = gesture.view
// Do something with header view
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6181 次 |
| 最近记录: |