0

我通过情节提要设计了 tableView,在一个单元格中我有一个按钮和一个标签。按钮在 storyboard.in cellForRowAtIndexPath 上有标签 1 和标签有标签 2 我正在访问这些,如下所示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@" i am back in cellForRowAtIndexPath");  

    static NSString *CellIdentifier = nil;
   // UILabel *topicLabel;
    NSInteger rows=indexPath.row;
    NSLog(@"row num=%i",rows);
    if (rows % 2==0)
    {
        CellIdentifier=@"LeftTopicCell";
    }
    else
    {
        CellIdentifier=@"RightTopicCell";

    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    UIButton *topicButton=(UIButton *)[cell viewWithTag:1];
    UILabel  *topicScoreLabel=(UILabel *)[cell viewWithTag:2];

    NSString *topicNameLabel=[[NSString alloc]init];

    //some logic processing


            topicNameLabel= topicItem.topicTitle;

            [topicButton setTitle:topicNameLabel forState:UIControlStateNormal];
        [topicButton setTag:indexPath.row ];
            [topicButton setTitle:topicNameLabel forState:UIControlStateHighlighted];
            [topicButton addTarget:self action:@selector(topicButtonSelected:) forControlEvents:UIControlEventTouchDown];

        [topicScoreLabel setText:[NSString stringWithFormat:@"%d/%d",correctAnswers,[answerResults count]]];
    }

    return cell;
}

第一次它工作得很好,但是当我回到这个视图控制器时,我又重新加载了这个,但这次它工作了两行。但是对于第三行,它为此行返回 UIButton 而不是 UILabel ,UILabel *topicScoreLabel=(UILabel *)[cell viewWithTag:2];因此它给出异常“无法识别的选择器“[UIButton setText]””;

4

2 回答 2

4

因为您将按钮和标签设置为标签 1 和 2,然后再次将标签值设置为 indexpath.row,这就是它产生问题的原因

 [topicButton setTag:indexPath.row ];

因此,只需为您的按钮和标签设置一些其他标签值,例如 1000。

然后你访问

UIButton *topicButton=(UIButton *)[cell viewWithTag:1000];
UILabel  *topicScoreLabel=(UILabel *)[cell viewWithTag:1001];
于 2013-01-30T10:17:47.693 回答
0

我得到了答案,因为我正在根据行号通过 cellForRowAtIndexPath 中的 setTag 方法更新按钮标签,它将标签设置为按钮为 2,这就是它返回 UIButton 的原因

于 2013-01-30T10:11:30.510 回答