如何检测在触摸UITableView
? 我想在这个解决方案的线程 。 我有我tableView
和scrollView
中相同UIViewController
有一个约束,所以它是复杂的子类tableView
。
该触摸方法是不叫:
class ViewController: UIViewController, UIScrollViewDelegate, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var verticalSpacing: NSLayoutConstraint!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var tableView: UITableView!
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
super.touchesBegan(touches, withEvent: event)
println("touch began")
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
super.touchesMoved(touches, withEvent: event)
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
super.touchesEnded(touches, withEvent: event)
println("touch ended")
}
override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
super.touchesCancelled(touches, withEvent: event)
}
我说:
tableView.userInteractionEnabled = true
tableView.canCancelContentTouches = false //or true is the same
但它不会改变任何东西。 在scrollView
在同一时间可见tableView
,但他们不重叠。
有与该的UITableView检测更改滚动视图工作时,可以是有用的方法。 这些可能对你有用。
例如,
override func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
println("Ended decelerating")
}
override func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
println("Ended dragging")
}
无子类需要!
只需添加一个手势识别,并确保包括一个呼叫cancelsTouchesInView
下面是斯威夫特的版本:
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:"))
}
func handleTap(sender: UITapGestureRecognizer) {
if sender.state == .Ended {
// Do your thang here!
}
sender.cancelsTouchesInView = false
}
请享用!
你的问题是, touchesBegan
等也都是从方法UIView
,所以你需要或者子类UITableView
或使用TapGestureRecognizer,使其工作就像你需要它。
它不应该太复杂子类UITableView
,因为你可以设置你的UITableView类作为类的的tableView在你的故事板,像你UIViewControllers等做
你有没有尝试调整delaysContentTouches
? 这可能是因为,如果你按下足够长的时间你接触将与默认延迟登记。
要问,是有一个原因,你不能只使用didSelectRowAtIndexPath
?
迟到了,但我需要来检测触摸上表中没有自来水 ,所以我结束了这一点:
fileprivate class TouchSensitiveTableView: UITableView {
fileprivate var onTouchStart: (() -> ())? = nil
fileprivate var onTouchEnd: (() -> ())? = nil
public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.onTouchStart?()
}
public override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
self.onTouchEnd?()
}
}
然后,使用这样的
private let tableView = TouchSensitiveTableView()
viewDidLoad() {
....
self.tableView.onTouchStart = {[weak self] in .... }
self.tableView.onTouchEnd = {[weak self] in .... }
与表的滚动未成年人的互动,但nothng重大。