1

数日前から問題が発生しています。問題は、複数のカスタム テーブル セルを含むテーブルがあり、各セルに複数のボタンがあることです。しかし、私は常にタグの値をゼロとして取得しています。以下は私のコードです

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CuatomCell_Contacts *cell    =   (CuatomCell_Contacts *) [tableView dequeueReusableCellWithIdentifier:@"cellA"];
    if  (cell == nil)
    {
        NSArray *topLevelObjects            =   [[NSBundle mainBundle] loadNibNamed:@"CuatomCell_Contacts" owner:Nil options:nil];

        for (id currentObject in topLevelObjects)
        {
            if  ([currentObject isKindOfClass:[UITableViewCell class]])
            {
                cell =  (CuatomCell_Contacts *) currentObject;

                break;
            }
        }
    }
    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    cell.accessoryType = UITableViewCellAccessoryNone;
    IstructContacts *ObjIstructContacts = nil;
    if (table == self.searchDisplayController.searchResultsTableView)
    {
        ObjIstructContacts = [self.filteredListContent objectAtIndex:indexPath.row];
    }
    else
    {
        ObjIstructContacts = [self.sectionedListContent objectAtIndexPath:indexPath];
    }

    cell.m_CtrlLblName.text = ObjIstructContacts.m_strName;
    //cell.m_CtrlLblContact_Id.text=ObjIstructContacts.m_strContact_Id;
    NSLog(@"%@",ObjIstructContacts.m_strImageUrl);
    if ([ObjIstructContacts.m_strImageUrl isEqualToString:@"No_image"])
    {
        cell.m_CtrlImgImage.image=[UIImage imageNamed:@"Person_Dumy.jpeg"];
    }
    else
    {
        NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: ObjIstructContacts.m_strImageUrl]];

        cell.m_CtrlImgImage.image=[UIImage imageWithData: imageData];
    }
    cell.M_CtrlBtnChat.tag=indexPath.row;
    [cell.M_CtrlBtnChat addTarget:self action:@selector(MoveToNextView:) forControlEvents:UIControlEventTouchUpInside];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self
               action:@selector(MoveToNextView:)
     forControlEvents:UIControlEventTouchDown];
    [button setTitle:@"Custom Action" forState:UIControlStateNormal];
    button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f);
    button.tag=indexPath.row;
    [cell.contentView addSubview:button];

    return cell;
}



-(void)MoveToNextView:(id)sender
{
    UIButton *button = (UIButton *)sender;

    NSLog(@"Tag Value = %d",button.tag);
}

タグ値は常に 0 を返します。静的および動的ボタン アクションの両方で。

4

4 に答える 4

3

ビューを囲む行を見つけるためのよりクリーンな方法であるこの方法を試してください。

 -(IBAction)cellButtonTapped:(id)sender {
    UIButton *button = sender;
    CGPoint correctedPoint = [button convertPoint:button.bounds.origin toView:self.tableview];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:correctedPoint];
    NSLog(@"Button tapped in row %d",indexPath.row);
    }    
于 2014-01-16T08:00:43.243 に答える
2

サンプルプロジェクトを試してみましたが、このようにうまく機能します

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier =@"CustomCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell)
    {
        NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        cell = (UITableViewCell*)[array objectAtIndex:0];
       }

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self
               action:@selector(MoveToNextView:)
     forControlEvents:UIControlEventTouchDown];
    [button setTitle:@"Custom Action" forState:UIControlStateNormal];
    button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f);
    button.tag=indexPath.row;
    [cell.contentView addSubview:button];

    return cell;
}
-(void)MoveToNextView:(id)sender
{
    UIButton *button = (UIButton *)sender;

    NSLog(@"Tag Value = %d",button.tag);
}

ボタンをクリックすると、ログが表示されます

2013-07-23 11:58:31.719 Trial[895:11303] Tag Value = 0
2013-07-23 11:58:33.726 Trial[895:11303] Tag Value = 1
2013-07-23 11:58:35.126 Trial[895:11303] Tag Value = 2
2013-07-23 11:58:35.998 Trial[895:11303] Tag Value = 3
2013-07-23 11:58:36.910 Trial[895:11303] Tag Value = 4
于 2013-07-23T06:34:26.880 に答える
1

以下のようなセクションでもタグを設定してみてください

cell.M_CtrlBtnChat.tag = [[NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row]intValue];

1 つ以上のセクションがあり、すべてのセクションに 1 つの行がある場合、すべての行に対して 0 を取得する可能性があるため、上記のコードのようにセクションの値も取得します。

EXの場合:ボタンへのタグとして行番号を取得したい場合は、それを割り当てて毎回indexPath.row取得しますが、セクションで設定すると、、、などのように取得します。複数のセクションがある場合そして、すべてのセクションに 1 つの行しかありません。0001020

更新:またdequeueReusableCellWithIdentifier、別の値に設定して確認してください。以下のように...

NSString *cellID = [NSString stringWithFormat:@"Section:%d Row:%d",indexPath.section,indexPath.row];
CuatomCell_Contacts *cell    =   (CuatomCell_Contacts *) [tableView dequeueReusableCellWithIdentifier:cellID];
于 2013-07-23T06:13:37.573 に答える