我正在UITableViewCell
中继承UITableView
。我之前做了大约一千次,但现在我想抓住这个委托活动:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath;
当触摸单元格时,应该调用此回调。 但是我只是在触摸后按下6秒或6次,但不是每次触摸都会调用。
tableview是子类UIView
的子视图,我在awakeFromNib
中调用它:
-(void)awakeFromNib{
_table_view.delegate = self;
_table_view.dataSource = self;
}
tableview自己画得很好,但这个事件效果不好。 任何想法?
这里是UITableViewCell
子类代码.m
#import "FLBlockedPersonCell.h"
@implementation FLBlockedPersonCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
[super setHighlighted:highlighted animated:animated];
}
@end
答案 0 :(得分:8)
也许您在视图上添加了UITapGestureRecognizer,当您触摸它时,UITapGestureRecognizer首次响应。
答案 1 :(得分:2)
当触摸单元格时,应该发生此调用:
-(void) tableView:(UITableView*) tableView didHighlightRowAtIndexPath:(NSIndexPath*) indexPath
只有在您真正选择了一个单元格时才会调用didSelect,而不仅仅是单击它。还有一些像shouldHighlight和willSelect这样的方法会在触摸时调用。
答案 2 :(得分:1)
首先,确保tableView.allowsSelection
设置为YES
。
听起来我UIView
是UITableView
的子视图正在阻止触摸事件。
您需要确保UIView
子类未捕获任何触摸事件。我会从UIView
子类中删除任何这些方法:
touchesBegan:withEvent:
touchesMoved:withEvent:
touchesEnded:withEvent:
touchesCancelled:withEvent:
如果你实现这个方法,我也会返回NO:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return NO;
}
你真的不应该重写这些方法:
hitTest:withEvent:
pointInside:withEvent:
如果您是,请质疑原因并将其删除。