您好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];
}
答案 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
方法中。