【发布时间】:2014-03-17 04:14:15
【问题描述】:
在我的 UITableView 控制器中,我有单元格,每个单元格都包含一个 UILabel 和 UISegmentedController。总共有大约20个细胞。用户可以选择 UISegmentedControl 来控制对象是否包含在数组中。
我的问题是,当用户滚动 UISegmentedControl 时,UISegmentedControl 会重复,并且看起来好像 UISegmentedControl 有多个选择。我有一种感觉,这是因为细胞正在被重复使用,但不幸的是我对重复使用细胞没有很好的理解。
我一直在尝试玩弄:
if(cell == nil){}
但我不确定那里会发生什么:
这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"featuresCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSString *feature = [features objectAtIndex:indexPath.row];
UILabel *titleLabel = (UILabel *)[cell viewWithTag:9999];
titleLabel.text = feature;
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Yes", @"No", nil]];
segmentedControl.frame = CGRectMake(215, 17, 85, 28);
[segmentedControl addTarget:self action:@selector(valueChanged:) forControlEvents: UIControlEventValueChanged];
segmentedControl.tag = indexPath.row;
[cell addSubview:segmentedControl];
if ([selectedFeatures containsObject:feature]) {
segmentedControl.selectedSegmentIndex = 0;
}
else{
segmentedControl.selectedSegmentIndex = 1;
}
return cell;
}
非常感谢您的帮助,
感谢您的宝贵时间。
【问题讨论】:
-
将您的代码从
NSString *feature包装到内部,如if(cell == nil) { NSString *feature = ........} return cell; -
你在使用故事板吗?
-
@arthan.v 谢谢,但如果我这样做,则不会显示该段,并且标签的文本不会更改以显示该功能。
-
@Akhilrajtr 是的,我正在使用情节提要,但我没有在情节提要中添加 UISegmentedControl,而是将其添加到 cellForRow 中,这样我就可以知道标签值正在添加/删除哪个功能。跨度>
-
从未向单元格添加任何子视图!将子视图添加到单元格的
contentView。
标签: ios objective-c uitableview uisegmentedcontrol