我有SoundTableViewController
3 个静态行,表示声音选择选项。我想UITableViewCellAccessoryCheckmark
从 Core Data 中的对象中加载具有相应名称/字符串值的行上的选定/默认值。不太难。但是,一旦成功添加复选标记,我希望用户能够选择和取消选择任何其他声音并添加/删除复选标记。用户做出最终选择后,我想将所选声音添加/更新到 Core Data 中的相应对象并保存。此外,如果用户离开SoundTableViewController
并返回,我希望保持此选择。
我可以使用 indexPath in 中的标记来“检查和取消选中”一行didSelectRowAtIndexPath
。在 Core Data 中加载属性时,我可以让默认选择被“选中”。但是,我不确定如何让这两件事同时发生。
这是我的cellForRowAtIndexPath
和didSelectRowAtIndexPath
方法。
cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"sound";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if(cell == nil )
{
cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Getting file name from path for title of cell
NSString *fileName = [soundsArray objectAtIndex:indexPath.row];
fileName = [[fileName lastPathComponent] stringByDeletingPathExtension];
cell.textLabel.text = fileName;
NSLog(@"FILENAME HAS A VALUE OF: %@", fileName);
if ([indexPath compare:self.lastIndexPath] == NSOrderedSame)
{
//If sound has been selected previously, set sound selection
if ([cell.textLabel.text isEqualToString:self.selectedSound])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
//if no sound has been selected previously, set 'Bells' as default sound
if ([cell.textLabel.text isEqualToString:@"Bells"])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
//The following is the original code to 'check and uncheck' rows
/*
if ([indexPath compare:self.lastIndexPath] == NSOrderedSame)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
*/
return cell;
}
didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.lastIndexPath = indexPath;
[self.tableView reloadData];
}
我假设我需要的逻辑都应该进入cellForRowAtIndexPath
. 但是,也许最好的方法是进行didSelectRowAtIndexPath
新的选择并保存到 Core Data?
同样,我想:
在开始时在选定/默认行上加载复选标记
允许用户从表中选择任何声音并仅对当前选定行进行复选标记
- 最终选择时将所选行从 Core Data 保存到当前对象
任何见解或指示将不胜感激。