2

tableviewcellでimageviewがクリックされたときに特定の番号に電話をかける必要があります。呼び出し先の番号は、imageviewの横のラベルに表示されます。しかし、どのセルがクリックされたかを取得できませんでした。常に最後のセルを参照しています.

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

    if(cell == nil)
    {
        cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];
        lblphone = [[UILabel alloc] initWithFrame:CGRectZero];
        lblphone.tag = 116;
        lblphone.backgroundColor = [UIColor clearColor];
        [lblphone setFont:[UIFont fontWithName:@"Helvetica" size:12]];
        [lblphone setLineBreakMode:UILineBreakModeWordWrap];
        [lblphone setUserInteractionEnabled:YES];

        UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelButton:)];
        tapGestureRecognizer.cancelsTouchesInView=NO;
        [tapGestureRecognizer setNumberOfTapsRequired:1];
        [lblphone addGestureRecognizer:tapGestureRecognizer];
        [tapGestureRecognizer release];
        [cell addSubview:lblphone];

        myImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
        myImageView.tag = 120;
        myImageView.image=[UIImage imageNamed:@"CallImg.png"];

        UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageSelectedInTable:)];
        [tapped setNumberOfTapsRequired:1];
        [myImageView addGestureRecognizer:tapped];
        [tapped release];
        [cell addSubview:myImageView];
    }

    [myImageView setFrame:CGRectMake(10, 50,30,30)];
    myImageView= (UIImageView*)[cell viewWithTag:120];
    myImageView.image=[UIImage imageNamed:@"CallImg.png"];
    myImageView.userInteractionEnabled=YES;

    CGSize constraint5 = CGSizeMake(320, 2000.0f);
    CGSize size5=[phone sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
    lblphone =(UILabel *)[cell viewWithTag:116];
    [lblphone setFrame:CGRectMake(45,name.frame.size.height+name.frame.origin.y,320, size5.height)];
    lblphone.textAlignment=UITextAlignmentLeft;
    lblphone.backgroundColor=[UIColor clearColor];
    lblphone.text=[NSString stringWithFormat:@"%@ ",phone ];
    [lblphone sizeToFit];
}

そして、imageclickのタップジェスチャで、私はこれを書いています:

-(IBAction)imageSelectedInTable:(UITapGestureRecognizer*)gesture
{
    UIImageView *imgView = (UIImageView *) [gesture view];
    UITableViewCell *cell = (UITableViewCell*)[[imgView superview]superview];
    NSIndexPath *tappedIndexPath = [self.tableView indexPathForCell:cell];
    NSLog(@"Image Tap %@", tappedIndexPath);
    UILabel *phoneno = (UILabel *)[cell viewWithTag:116];

    NSString *phoneNumber = [@"telprompt://" stringByAppendingString:phoneno.text];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
}

しかし、どのセルがクリックされたかに関係なく、最後にクリックされたセルを常に参照しています。どこが間違っているのか理解できませんか?

4

3 に答える 3

1

クリックされたセルを取得/知るために、次のコードを記述します

UITableViewCell *cell = (UITableViewCell *)[[imgView superview]superview];

indexPathまた、タップされたセルを取得したい場合は、次のように記述します

NSIndexPath *indexPath = [tableView indexPathForCell:cell];

EDITED :-> 別の方法は

ギブ・tagオブ・UIImageViewインcellForRowAtIndexPath・メソッドなど、

imageView.tag = indexPath.row; 

そして、次のコードを使用します

int row = ((UIImageView*)imgView).tag; //Or// int row = ((UIGestureRecognizer *)sender).view.tag;

NSIndexPath* indexpath = [NSIndexPath indexPathForRow:row inSection:0]; 
UITableViewCell* cell = [table cellForRowAtIndexPath:indexPath];

ここCellで Tappedを取得できますUIImageView

于 2013-04-05T06:15:03.640 に答える