在UITableViewCells中标记UISwitch

时间:2014-11-03 16:57:39

标签: ios objective-c uitableview xcode6

我有一个UITableView,我在每个UITableViewCell(静态单元格)中放置了一个UISwitch。 每个UISwitch都向网页发送一个命令,问题是我放在UITableView中的所有UISwitch只发送发送第一个UISwitch的命令。

我知道如果UISwitches是以编程方式创建的,那么解决我问题的代码是theSwitch.tag = indexPath.row,但是,我如何对故事板中创建的UISwitch执行相同的操作?

我希望你能帮助我。

问候。

2 个答案:

答案 0 :(得分:0)

当您创建UISwitch时,您需要使用以下代码:

// Create
UISwitch *firstSwitch = [[UISwitch alloc] init];
// Add its action
[firstSwitch addTarget:self action:@selector(selectorTitle:) forControlEvents:UIControlEventValueChanged];
// If you have several with the same action, you can use tag.
firstSwitch.tag = indexPath.row;
// And finally added to the view.
cell.accessoryView = firstSwitch;

//完整的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *reuseIdentifier = @"rIden";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
    UISwitch *theSwitch = [[UISwitch alloc] init];
    // You can put here the action you want.
    cell.accessoryView = theSwitch;
}
// And here
cell.textLabel.text = @"The name...";
UISwitch *theSwitchUsedInThisCell = (UISwitch *)cell.accessoryView;
theSwitchUsedInThisCell.tag = indexPath.row;


return cell;
}

答案 1 :(得分:0)

如果您不想为UITableViewCell创建子类,那么您可以使用accessoryView来显示您的开关。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    UISwitch *switchView = cell.accessoryView ?: [[UISwitch alloc] init];
    [switchView addTarget:self action:@selector(switchWasToggled:) forControlEvents:UIControlEventValueChanged];
    cell.accessoryView = switchView;
    return cell;
}

- (void)switchWasToggled:(UISwitch *)switchView {
    CGRect switchFrame = [switchView convertRect:switchView.bounds toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:switchFrame.origin];
    [self setOn:(BOOL)isOn atIndexPath:indexPath];
}

- (void)setOn:(BOOL)isOn atIndexPath:(NSIndexPath *)indexPath {
    NSString *urlString = [NSString stringWithFormat:@"Switch number %d is %@", indexpath.row, isOn ? @"on" : @"off"];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [web loadRequest:urlRequest];
}