2

嗨,我在UILabel重复相同位置时遇到问题UITableView

我有一个自定义单元格和三个UILabels. 我只在 处显示第一个标签,在 处显示cellForRowAtIndexPath另外两个didSelectRowAtIndexPath

当我点击单元格时,我想再显示两个标签显示,但是当我滚动 TableView 时它们在同一位置重复。

请帮我

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"English";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (isSearchOn) 
    {
         static NSString *CellIdentifier = @"English";
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
         NSString *cellValue = _searchResult [indexPath.row];
         cell.textLabel.text = cellValue;
         [cell.textLabel setFont:[UIFont fontWithName:@"Helvetica LT Std" size:22]];
    }
    else
    {
        ConversationInEnglish *con = _conversationsInfosnew [indexPath.row];
        _englishLabel = (UILabel *) [cell viewWithTag:10];
        _englishLabel.text = con.english;
        [_englishLabel setFont:[UIFont fontWithName:@"Helvetica LT Std" size:22]];
        UIButton *starButton = [UIButton buttonWithType:UIButtonTypeCustom];
        starButton.frame = CGRectMake(0 , 0 , 60, 37);
        UIImage *btnImage = [UIImage imageNamed:@"star.png"];
        [starButton setImage:btnImage forState:UIControlStateNormal];
        starButton.tag = indexPath.row;
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.accessoryView = starButton;
    }
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self.expandedCellIndexPath isEqual:indexPath]){
    }
    else 
    {
        ConversationInEnglish *con = _conversationsInfosnew [indexPath.row];
        UITableViewCell *cell1 = [self.tableView cellForRowAtIndexPath:indexPath];
        _myanmarLabel = (UILabel *)[cell1 viewWithTag:222];
        _myanmarLabel.tag = indexPath.row;
        _myanmarLabel.text = con.myanmar;
        [_myanmarLabel setFont: [UIFont fontWithName:@"Masterpiece Uni Sans" size:16]];
        [cell1.contentView addSubview:_myanmarLabel];
        _tonebasedLabel = (UILabel *)[cell1 viewWithTag:333];
        _tonebasedLabel.tag = indexPath.row;
        _tonebasedLabel.text = con.tone_based;
        [_tonebasedLabel setFont:[UIFont fontWithName:@"Helvetica LT Std" size:15]];
        [cell1.contentView addSubview:_tonebasedLabel];
        _speaker = [UIButton buttonWithType:UIButtonTypeCustom];
        _speaker.frame = CGRectMake(100 , 80 , 150, 37);
        UIImage *btnImage = [UIImage imageNamed:@"speaker.png"];
        [_speaker setImage:btnImage forState:UIControlStateNormal];
        _speaker.tag = indexPath.row;
        [cell1.contentView addSubview:_speaker];
        self.expandedCellIndexPath = indexPath;
        self.expandedCellHeight = 110.0f;
    }
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}
4

3 回答 3

0

完成它的最简单方法如下:

首先有一个与你的数据数组大小相同的可变数组(让它像这样@property (nonatomic,strong) NSMutableArray *searchActive;)。

然后在tableView: didSelectRowAtIndexPath:方法中添加以下行:( [self.searchActive setObject:@"1" atIndexedSubscript:indexPath.row];这里我在数组中使用文本数据,您可以使用任何东西,即使您可以使用字典对象将数据数组创建为可变数组,其中每个字典包含两个数据,一个用于在表中显示,第二个是以除冰哪个单元被轻敲)。

在这条线之下和之间[self.tableView beginUpdates];<#HERE#> [self.tableView endUpdates];

只需添加一行[self.tableView reloadData];

并在tableView: cellForRowAtIndexPath:添加条件语句如下:

if([[self.searchActive objectAtIndex:indexPath.row] isEqualToString:@"1"]) { <# display additional controls here or do what you want to change for the cell#> }

愿这能解决你的问题:)

编辑 在声明属性后,您需要@synthesize在 .m 文件中使用它。

之后只写一个语句self.activeCell = [NSMutableArray alloc]initWithArray:<#YOUR TableView's Data Source Array#>];这里我假设您的 tableview 数据源包含字符串数据

这也是使您的activeCell数组至少具有与您的 tableview 的数据源数组一样多的数量所必需的。

把上面的语句放在viewDidLoad方法里面。

于 2013-03-07T06:16:29.680 回答
0

创建 UILabel 的代码似乎不在您提供的代码段中,因此我不能确定这是您的问题,但请检查您的 UILabel 框架的原点是否靠得太近。其中一个原点可能需要增加其 x 值以分隔两个视图。

于 2013-03-02T07:18:15.063 回答
0

尝试将 yourtextfield.hidden = yes 放入 indexpath 处的行单元格中,这样每次滚动时文本字段都会被隐藏,并且在 didselect 中您可以显示.希望这会有所帮助

于 2013-03-02T07:19:45.030 回答