0

编辑:谢谢大家,但这已经太笼统了,因为很明显手头有更深层次的问题。我将尝试删除这个问题。感谢您的所有帮助!

我们有一个很大的 UITableViewCell,里面有一个 UILabel,我们想要检测用户在该标签上的单击或触摸。我们在子类 UITableViewCell 中添加了一个 UITapGestureRecognizer:

CGRect frame = CGRectMake(0, 10, 150, 20);
self.titleLabel = [[UILabel alloc] initWithFrame:frame];
self.titleLabel.text = self.title;
self.titleLabel.userInteractionEnabled = YES;

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(expandButtonTapped:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.titleLabel addGestureRecognizer:singleTap];

[cell.contentView addSubview:self.titleLabel];

我们还尝试将目标设置为单元格的 UITableViewController,但结果相同,操作没有执行。检查调试器时,手势确实存在并附加到标签上。

编辑:经过更多调查,如果我们向单元格添加普通 UIButton,则无法单击它。做更多的调查,但这里是 cellForRowAtIndexPath 方法:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (![self.metaDataSections count]) {
        return nil;
    }

    ACMTableCellMetaData *metaData = [self metaDataForIndexPath:indexPath];

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:metaData.reuseIdentifier];

    if (cell == nil) {
        cell = [metaData createCell];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    cell = [metaData updateCellWithCellForReuse:cell];

    return cell;
}

createCell 方法:

- (UITableViewCell *)createCell
{
    UITableViewCell *cell = [super createCell];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:self.reuseIdentifier];

        cell.frame = CGRectMake(CGRectGetMinX(cell.contentView.frame),
                                CGRectGetMinY(cell.contentView.frame),
                                CGRectGetWidth(cell.contentView.frame),
                                ACM_TABLE_CELL_HEIGHT);
        [self setupExpandButtonInCell:cell];
    }        
    return cell;
}

updateCell 方法:

- (UITableViewCell *)updateCellWithCellForReuse:(UITableViewCell *)cell {
    UILabel * titleLabel = (UILabel *)[cell.contentView viewWithTag:TITLE_TAG];

    titleLabel = self.titleLabel;
    self.cell = [super updateCellWithCellForReuse:cell];

    return self.cell;
}

我剪掉了一些我认为不会影响任何东西的代码。在子类表视图中被覆盖的 didSelectRowAtIndexPath 没有任何会阻止用户点击的内容。但奇怪的是,如果我在那里设置一个断点,则在点击单元格时它永远不会被击中。所以我相信这里还有其他问题。然而,我们不明白为什么会这样。

4

2 回答 2

0

如果您在继承 UITableViewCell 的类中编写此代码,则不是

[cell.contentView addSubview:self.titleLabel];

利用

[self addSubView:self.titleLabel];

确保实施

-(void)expandButtonTapped:(parameter type)parameter{

}

在同一个班。

于 2013-09-06T18:23:20.760 回答
0

我忘了提

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    TableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(!cell)
    {
        cell    =   [[TableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
// Configure the cell...






    return cell;
}
于 2013-09-06T18:26:25.117 回答