我有UITableView
,其中包含很多行。在我的屏幕中,UISwitch
中的几行可以添加UITableView
。请告诉我该怎么做?
我应该创建一个UISwitch
&的自定义单元格吗?显示或隐藏UISwitch
。
我应该直接从cellForRowAtIndexPath:
中的代码添加UISwitch。
有什么建议吗?
修改
我已尝试过此代码,但这不起作用。
SettingsCell *cell;
static NSString *CellIdentifier = @"SettingCell";
if (cell == nil)
{
cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
[cell setSelectionStyle:UITableViewCellSelectionStyleDefault];
[tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
}
if(indexPath.row==2 || indexPath.row==3)
{
cell.switch_value.hidden=false;
}
else
{
cell.switch_value.hidden=true;
}
cell.label_text.text = [VALUES objectAtIndex:indexPath.row];
return cell;
答案 0 :(得分:0)
如果要创建新单元格,则应仅将该单元格用于所需行。对于其余的行,您不应该忘记隐藏开关。
如果您直接从UISwitch
中的代码创建CellForRowAtIndexPath
,那么您应该在重新使用单元格时注意。如果对两种单元格类型使用不同的标识符,则显示/隐藏问题将得到解决。
答案 1 :(得分:0)
这两个解决方案都可以在这里工作:您可以在UISwitch
的{{1}}中添加UITableViewCell
:在创建新的cellForRowAtIndexPath:
之前,请务必检查以前是否存在UISwitch
之一。
第二个解决方案包括使用自定义UITableViewCell
子类。
我更喜欢这种解决方案,因为您不必投射子视图或使用viewWithTag:
方法,甚至检查您的自定义子视图是否已创建。
您应该创建一些简单的子类,例如PickerCell,SwitchCell,TextFieldcell:因此您将拥有自己的一组自定义UITableViewCell
子类,可以在所有项目中使用。
假设您已注册重用标识符,请尝试:=
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *SettingCellIdentifier = @"SettingCell";
static NSString *StandardCellIdentifier = @"StandardCell";
if (indexPath.row == 2 || indexPath.row == 3) {
SettingsCell *cell = (SettingsCell *)[tableView dequeueReusableCellWithIdentifier:SettingCellIdentifier forIndexPath:indexPath];
[cell setSelectionStyle:UITableViewCellSelectionStyleDefault];
[tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
cell.label_text.text = [VALUES objectAtIndex:indexPath.row];
// Do whatever you want with the switch here
return cell;
}
else
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:StandardCellIdentifier forIndexPath:indexPath];
// instantiate a regular UITableViewCell
cell.label_text.text = [VALUES objectAtIndex:indexPath.row];
return cell;
}
}