为啥我们不能在 UITableView、Objective C 上检测到 UITouch 逻辑
Posted
技术标签:
【中文标题】为啥我们不能在 UITableView、Objective C 上检测到 UITouch 逻辑【英文标题】:why cant we detect a UITouch logic on UITableView, Objective C为什么我们不能在 UITableView、Objective C 上检测到 UITouch 逻辑 【发布时间】:2013-08-25 22:44:00 【问题描述】:我搜索但不太明白为什么我们无法在 UITableView 上检测到 UITouch。我现在拥有的是:一个视图控制器,其视图中有一个表视图。请看下面的图片供您参考
在实现类中,我为每个 UITouch 方法启用断点
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
我注意到,当且仅当您触摸表格视图之外(橙色区域)时,才会调用这些断点
我不明白。我认为 UITableView 是 UIScrollView 的子类,它是 UIView 的子类,它是 UIResponder 的子类。这意味着应该调用 UITouch。 (如果我错了,请纠正我)
这里欢迎和赞赏所有的cmets。
【问题讨论】:
【参考方案1】:与其篡改表格视图,不如使用手势识别器。您可以充当代理以确保所有交互同时进行,并根据需要启用和禁用手势。
【讨论】:
【参考方案2】:您可以通过将 UITableView 子类化为以下方式来检测触摸方法: 我测试它并成功打印“测试”
//TestTable.h
#import <UIKit/UIKit.h>
@interface TestTable : UITableView
@end
//TestTable.m
#import "TestTable.h"
@implementation TestTable
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
NSLog("Test");
【讨论】:
【参考方案3】:表格利用滚动视图来处理平移,它使用平移手势识别器。为什么不直接利用它呢?
CGPoint location = [self.tableView.panGestureRecognizer locationInView:self.tableView];
【讨论】:
【参考方案4】:如果你想检测 UITableView 上的触摸,创建一个 tableview 的子类并添加实现 UIResponder 方法,canBecomeFirstResponder。
@interface MyTableView: UITableView
@end
@implementation: MyTableView
- (BOOL) canBecomeFirstResponder
return YES;
// then implement all other touch related methods, remember to call super in these methods
// such that it correctly forwards the events to other responders
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
//
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
@end
【讨论】:
以上是关于为啥我们不能在 UITableView、Objective C 上检测到 UITouch 逻辑的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能从 UITableView 单元格转到 detailView 工作?
为啥我不能专注于 iOS 中 uitableview 单元格(越过导航栏)中的正确 uitextfield,目标 c
为啥“[self.tableView reloadData]”不能确保我看到刚刚添加到 UITableView 的数据的最新行? (包括代码)