use*_*839 16 iphone uitableview ios
我创建了UITableView一个自定义UITableViewCell.我的单元格包括UIImageView左侧和UITextView右侧的单元格.
在里面UITableViewController,我在tableview中设置了图像和文本cellForRowAtIndexPath.
一切都显示正常,但现在我需要实现didSelectRowAtIndex我需要区分是否UIImageView或UITextView细胞已被点击.
假设图像点击表示删除操作和其余的单元格编辑操作.
ste*_*rro 48
您可以将一个手势识别器添加到每个单独的单元格,而不是将其添加到表格视图中,并确定从用户触摸的点选择了哪个单元格,然后确定用户是否触摸了图像或单元格.
首先确保您的控制器采用UIGestureRecognizerDelegate协议.
@interface MyTableViewController() <UIGestureRecognizerDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
然后添加UIGestureRecognizer到UITableView视图加载时.
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTap.delegate = self;
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:singleTap];
}
Run Code Online (Sandbox Code Playgroud)
此委托方法确定是否handleTap:应执行该方法.如果它可以indexPath从用户触摸中找到,则返回,YES否则返回NO.
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
UITableView *tableView = (UITableView *)gestureRecognizer.view;
CGPoint p = [gestureRecognizer locationInView:gestureRecognizer.view];
if ([tableView indexPathForRowAtPoint:p]) {
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
一旦我们确定用户是否单击了一个单元格,就会调用handleTap:方法,然后决定用户是否触摸了图像或单元格的任何其他部分.
- (void)handleTap:(UITapGestureRecognizer *)tap
{
if (UIGestureRecognizerStateEnded == tap.state) {
UITableView *tableView = (UITableView *)tap.view;
CGPoint p = [tap locationInView:tap.view];
NSIndexPath* indexPath = [tableView indexPathForRowAtPoint:p];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
CGPoint pointInCell = [tap locationInView:cell];
if (CGRectContainsPoint(cell.imageView.frame, pointInCell)) {
// user tapped image
} else {
// user tapped cell
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以继承UITableViewCell和覆盖touchesEnded.
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self];
UIView *hitView = [self hitTest:location withEvent:event];
if (hitView == myImageView) ...;
if (hitView == myTextView) ...;
}
Run Code Online (Sandbox Code Playgroud)
你需要保持一定的参考您UIImageView和UITextView(他们可能应该是你的电池的特性).
您当然可以覆盖touchesBegan而不是touchesEnded取决于您希望实现的功能.
| 归档时间: |
|
| 查看次数: |
10174 次 |
| 最近记录: |