我有11行或更多行。需要仅在第一个单元格中创建UISwitch。当我点击任何一行时,UIswitch会重复。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:EN_MoreTableViewCell];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:EN_MoreTableViewCell];
cell.backgroundColor = [UIColor clearColor];
}
cell.textLabel.text = languageObject.name;
[cell.textLabel setFont:font];
if (indexPath.row == 0 && [languageObject.name isEqual: @"All Languages"]) {
if (!mySwitch) {
mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(_languageListTableView.frame.size.width - 60, 0, 40, 40)];
[cell.contentView addSubview:mySwitch];
}
cell.accessoryType = UITableViewCellAccessoryNone;
}
else { //other cell code//
}
请帮忙。
答案 0 :(得分:1)
或者:
在Storyboard中创建两个原型单元格,一个带有UISwitch
,一个没有indexPath.row == 0
,只有UISwitch
才会出现第一个。
或者:
将IBOutlet
添加到故事板中的单元格,为您的单元格设置self.mySwitch.isHidden = true
,并在单元格prepareForReuse()
中设置indexPath.row == 0
。
这样,重用单元格时的默认状态是隐藏开关。
稍后cell.mySwitch.isHidden = false
,请设置coreos/jetcd
。
答案 1 :(得分:1)
这是一个经典的iOS新手问题。当我们第一次使用表格视图时,这会让我们大多数人感到困惑(起初它确实让我很困惑。)
单元格被创建一次,然后一遍又一遍地重复使用。函数dequeueReusableCellWithIdentifier()
返回一个可循环使用的单元格,如果没有,则返回一个新单元格。
如果你有一个回收的电池,它已经添加了你的开关。
处理此问题最简洁的方法是使用UITableViewCell
的自定义子类定义单元格原型,该子类已添加所有字段并作为出口连接到单元格。然后,当您将单元格出列时,只需将其强制转换为自定义UITableViewCell
类,并使用您定义的属性来访问自定义字段(在本例中为您的开关。)
回收的单元格还可能包含其他字段中的值(如果您将标签字段设置为包含字符串,则它仍将包含字符串。)您需要清除旧值并完全配置回收的单元格。 (自定义单元类和原型无法解决此问题。您始终需要完全配置单元格中的每个字段。)
答案 2 :(得分:0)
这是因为细胞被重复使用。您可以删除-[UITableViewDataSource tableView:cellForRowAtIndexPath:]
中的所有现有子视图,也可以为每一行创建一个新的单元格。
答案 3 :(得分:0)
有时,自定义单元格只是将一个视图添加到一个非常好的标准UITableViewCell
中的大锤子。对于那些场合,延迟创建是一个很好的模式,可以在重用的单元格(甚至任何视图的任何子视图)上构建一次的视图。它的工作原理如下:
// in your cellForRowAtIndexPath, after dequeuing cell
UISwitch *switch = (UISwitch *)[cell viewWithTag:64]; // make up a unique tag
if (!switch) {
switch = [[UISwitch alloc] initWithFrame:...];
switch.tag = 64; // 64 must match the tag above
[cell addSubview:switch];
}
// here, switch is always valid, but only created when it was absent
答案 4 :(得分:0)
在故事板中添加UISwitch。连接插座。在tableview的cellforrowatindexpath中,如果索引为0,则设置hidden = false,否则设置hidden = true。希望这有效。
答案 5 :(得分:0)
您只需隐藏您不想显示的开关,并为您想要的特定索引路径动态设置该开关的操作