我有一个UITableView,我在每个UITableViewCell(静态单元格)中放置了一个UISwitch。 每个UISwitch都向网页发送一个命令,问题是我放在UITableView中的所有UISwitch只发送发送第一个UISwitch的命令。
我知道如果UISwitches是以编程方式创建的,那么解决我问题的代码是theSwitch.tag = indexPath.row
,但是,我如何对故事板中创建的UISwitch执行相同的操作?
我希望你能帮助我。
问候。
答案 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];
}