【问题标题】:How to put a switch in a UITableView如何在 UITableView 中放置开关
【发布时间】:2014-08-21 01:21:38
【问题描述】:

如何在TableView 中设置开关?我有一个设置为TableView 的数组,其中包含三个项目,我想在每个项目旁边显示一个开关。这可能吗?我已经尝试将它嵌入到TableView 单元格中,但它什么也没做,老实说我不知道​​为什么。任何帮助表示赞赏。

顺便说一句,这是我使用的没有帮助的代码:

Cell.accessoryView = switchView;
                [switchView setOn:NO animated:NO];
                [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
                [switchView release];

【问题讨论】:

  • 我建议创建一个自定义 UITableViewCell,然后将您的开关作为子视图(不是附件视图)添加到它。这样,您还可以在将来向其中添加其他元素,并且您的数据源函数不会出现问题,因为您可以使用 (UITableViewCell*) 进行转换。

标签: ios xcode uitableview uiswitch


【解决方案1】:

您可以通过将开关置于UITableViewCell 轻松完成此操作。我做到了没有任何问题。我正在分享我的 cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        StatusCell *cell = (StatusCell*) [self.tableView dequeueReusableCellWithIdentifier:@"StatusCell"];
        if (cell == nil) {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StatusCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }
        cell.name.text = [_StatArr objectAtIndex:indexPath.row];
        cell.switchControl.tag = indexPath.row;
        if ([[_StatArr objectAtIndex:indexPath.row] isEqualToString:@"Seat Allocated"]) {
            NSString *s = [[_StatArr objectAtIndex:indexPath.row] lowercaseString];
            NSString *ss = [s stringByReplacingOccurrencesOfString:@" " withString:@"_"];
            [cell.switchControl setOn:[[self.statusArr objectForKey:ss] boolValue] animated:YES];
        }
        else{
            if ([[_StatArr objectAtIndex:indexPath.row] isEqualToString:@"Seated"]) {
                [cell.switchControl setOn:[[self.statusArr objectForKey:[[_StatArr objectAtIndex:indexPath.row] lowercaseString]] boolValue] animated:YES];

            }
            else
            [cell.switchControl setOn:[[self.statusArr objectForKey:[[_StatArr objectAtIndex:indexPath.row] lowercaseString]] boolValue] animated:YES];
        }
        [cell.switchControl addTarget:self action:@selector(stateSwitched:) forControlEvents:UIControlEventValueChanged];
        return cell;
}

您只需要跟踪每个开关状态。希望这会有所帮助.. :)

【讨论】:

  • 在投反对票时,请添加一些评论,以便我知道您为什么不喜欢它。
  • 评论太笼统了,你应该给出解释,而不是在这里复制粘贴你的代码。询问的人既没有提到他使用 .xib 文件作为自定义单元格,也没有提到他在 .storyboard 中使用原型单元格。你应该先问他如何创建他的单元格,否则你发布的代码可能会使他感到困惑,甚至不能很好地解决他的问题。另外,他没有使用 ARC,因此如果他尝试按原样重用您的代码,那么您的代码很容易出错。 “_StatArr”也符合编码约定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多