【问题标题】:How to add UISWitch to few rows in UITable in iOS?如何在 iOS 的 UITable 中将 UISWitch 添加到几行?
【发布时间】:2016-03-09 02:28:28
【问题描述】:

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

【问题讨论】:

  • 和我一样。我用 UISwith 创建了一个自定义单元格,并根据单元格显示或隐藏它
  • 我已经用一些代码示例编辑了我的答案。

标签: ios iphone xcode uitableview ipad


【解决方案1】:

如果您要创建一个新单元格,那么您应该只将该单元格用于所需的行。对于其余的行,您不应该隐藏开关。

如果您直接从CellForRowAtIndexPath 中的代码创建UISwitch,那么在重新使用单元格时应该小心。如果您对两种单元格类型使用不同的标识符,则显示/隐藏问题将得到解决。

【讨论】:

    【解决方案2】:

    这两种解决方案都适用:您可以在 UITableViewCell 中添加一个 UISwitch 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;
        }
    }
    

    【讨论】:

    • 不要在cellForRowAtIndexPath中添加开关——单元格可以重复使用,然后再添加?或者您必须确保仅在它不存在时才添加它?那会出错...
    • 您不必多次添加它,因为使用dequeueReusableCellWithIdentifier 只会在您还没有可用单元格时分配单元格。
    • 但是如果你在出队单元格时添加它,你会遇到我描述的问题 - 当然不是在单元格 awakeFromNib 函数中创建它时,这不是你为解决方案 1 编写的。
    • 我没有详细解释第一个解决方案的待办事项列表,但是在这种情况下你是对的,你需要测试你的 UISwitch 子视图是否已经存在。第二种方法因此更容易。我已经编辑了我的答案以反映第一种方法的限制,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 2013-04-04
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多