0

我有SoundTableViewController3 个静态行,表示声音选择选项。我想UITableViewCellAccessoryCheckmark从 Core Data 中的对象中加载具有相应名称/字符串值的行上的选定/默认值。不太难。但是,一旦成功添加复选标记,我希望用户能够选择和取消选择任何其他声音并添加/删除复选标记。用户做出最终选择后,我想将所选声音添加/更新到 Core Data 中的相应对象并保存。此外,如果用户离开SoundTableViewController并返回,我希望保持此选择。

我可以使用 indexPath in 中的标记来“检查和取消选中”一行didSelectRowAtIndexPath。在 Core Data 中加载属性时,我可以让默认选择被“选中”。但是,我不确定如何让这两件事同时发生。

这是我的cellForRowAtIndexPathdidSelectRowAtIndexPath方法。

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?

同样,我想:

  1. 在开始时在选定/默认行上加载复选标记

  2. 允许用户从表中选择任何声音并仅对当前选定行进行复选标记

  3. 最终选择时将所选行从 Core Data 保存到当前对象

任何见解或指示将不胜感激。

4

1 回答 1

0

首先,您甚至在创建单元格之前就设置了单元格文本。

// 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(cell == nil )
{
    cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

我认为您的第一个单元格中可能没有任何文字?可以?另外,当视图首次出现时,您是如何初始化 self.lastIndexPath 和 self.selectedSound 的?

于 2013-02-12T20:42:36.573 回答