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 に答える