0

我有一个带有自定义单元 TaskCell 的 UITableView。TaskCell 具有 checkboxImageView ,我希望当用户单击 checkboxImageView 时会触发一个方法。由于某种原因,它总是触发 didSelectTableView 委托方法。这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{


    static NSString *CellIdentifier = @"TaskCell";

    Task *task = [tasks objectAtIndex:[indexPath row]];

    TaskCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        cell = [[TaskCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];        
    }


    [cell bindTo:task];

    return cell;
}


TaskCell.m: 

-(void) prepareGestureRecognizers 
{
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap:)];
    singleTapGestureRecognizer.delegate = self; 
    singleTapGestureRecognizer.numberOfTapsRequired = 1; 

    self.checkboxImageView.userInteractionEnabled = YES;

    [self.checkboxImageView addGestureRecognizer:singleTapGestureRecognizer];
}

-(void) onSingleTap:(UITapGestureRecognizer *) sender 
{
    NSLog(@"single tap!");
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

-(void) bindTo:(Task *)task
{
    [self prepareGestureRecognizers];

    self.titleLabel.text = task.title;
}
4

1 回答 1

0

如果您在 中添加手势识别器,则以TaskCell.m下行

singleTapGestureRecognizer.delegate = self;

delegate识别器的设置为单元格,而不是您的控制器。您应该在控制器文件中添加识别器,以便delegate正确设置。

我不确定这是否可行,因为我自己没有尝试过,但是您可以尝试在情节提要中设置识别器并让它成为@property您的单元格。然后,您可以在控制器文件中将委托设置为您的控制器。

于 2012-08-14T22:39:06.583 回答