在didSelectRowAtIndexPath创建的UILabel保持重复在同一位置

时间:2013-03-02 06:59:15

标签: ios uitableview ios6 uilabel tableview

您好UILabelUITableView重复相同位置时遇到问题。

我有一个自定义单元格和三个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];
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试在单元格中将yourtextfield.hidden = yes放在indexpath的行中,这样每次滚动文本字段都会被隐藏,而在didselect中你可以显示.hope这有帮助

答案 2 :(得分: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#> }

这可以解决你的问题:)

修改 声明属性后,您需要在.m文件中@synthesize

之后只需添加self.activeCell = [NSMutableArray alloc]initWithArray:<#YOUR TableView's Data Source Array#>];之类的语句(此处我假设您的tableview数据源包含字符串数据

这也是让你的activeCell数组至少与你的tableview数据源数组一样重要的数据所必需的。

将上述语句放在viewDidLoad方法中。