如何在iOS中的UITable中将UISWitch添加到几行?

时间:2015-12-04 08:05:00

标签: ios iphone xcode uitableview ipad

我有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;

2 个答案:

答案 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;
    }
}