我希望TableViewCell中的UISwitch在切换时将文本从“Active”更改为“Disabled”,反之亦然,但是当切换发生变化时,表格视图中的所有数据都会消失。我正在使用“重新加载数据”,因为我不知道如何更改特定单元格的文本。
仅供参考,'当前项'是具有BOOL属性'itemEnabled'的核心数据实体。
此开关仅在“编辑模式”期间可见。
我的'详细视图控制器'中的表格视图单元格中有一个UISwitch:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
NSString *cellDetail = nil;
static NSString *EnabledCellIdentifier = @"Enabled";
cell = [tableView dequeueReusableCellWithIdentifier:EnabledCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:EnabledCellIdentifier] autorelease];
UISwitch* actSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[cell setEditingAccessoryView:actSwitch];
[actSwitch addTarget:self action:@selector(actSwitchChanged:) forControlEvents:UIControlEventValueChanged];
if ([[currentItem valueForKey:@"itemEnabled"] boolValue]) {
cellDetail = @"Active";
actSwitch.on = YES;
} else {
cellDetail = @"Disabled";
actSwitch.on = NO;
}
[actSwitch release];
cell.textLabel.text = cellDetail;
return cell;
}
我有一种接收动作的方法:
- (void)actSwitchChanged:(id)sender {
UISwitch* swEnabled = (UISwitch*)sender;
NSManagedObjectContext* itemContext = [currentItem managedObjectContext];
currentItem.itemEnabled = [NSNumber numberWithBool:swEnabled.on];
NSError *error = nil;
if (![itemContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
答案 0 :(得分:2)
这是一种从动作方法中获取单元格的方法,该方法不需要子类化UISwitch:
- (void)switchAction:(id)sender {
// Cast the sender as a UISwitch
UISwitch *aSwitch = (UISwitch *)sender;
// Cast the superview of aSwitch to a UITableViewCell
UITableViewCell *cell = (UITableViewCell *)aSwitch.superview;
// You could get an indexPath as follows (though you don't need it in this case)
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
// Set the text of the label in your cell
cell.textLabel.text = aSwitch.on ? @"Active"; : @"Disabled";
}
答案 1 :(得分:1)
您可以使用-[UITableView cellForRowAtIndexPath:]
获取特定单元格。您只需要知道单元格的索引路径(还要注意您要求查看单元格的tableview,而不是调用委托方法)。
答案 2 :(得分:0)
所以我将UISwtich子类化并包含用于存储单元格索引路径的属性,然后可以在action方法中使用:
- (void)actSwitchChanged:(id)sender {
TLSwitchInCell* swEnabled = (TLSwitchInCell*)sender;
currentItem.itemEnabled = [NSNumber numberWithBool:swEnabled.on];
UITableViewCell* theCell = [self.tableView cellForRowAtIndexPath:swEnabled.cellIndexPath];
theCell.textLabel.text = swEnabled.on ? @"Active" : @"Disabled";
}
答案 3 :(得分:0)
主题的另一个变体!如果你有很多带开关按钮的设置字段,你可以使用这样的东西来获取与触发的开关按钮相关联的标签文本!您可以使用常用方法设置文本!
@IBAction func switch(sender: UISwitch) {
let labelIndex = sender.superview!.subviews.indexOf({$0 is UILabel})
NSLog("The text from the label associated with this switch is %@",
(sender.superview!.subviews[labelIndex!] as! UILabel).text!)
}