SoundTableViewController
サウンド選択オプションを示す 3 つの静的な行があります。UITableViewCellAccessoryCheckmark
Core Data のオブジェクトから対応する名前/文字列値を使用して、行に選択/デフォルトをロードしたいと考えています。それほど難しくありません。ただし、チェックマークが正常に追加されたら、ユーザーが他のサウンドを選択および選択解除し、チェックマークを追加/削除できるようにしたいと考えています。ユーザーが最終的な選択を行ったら、選択したサウンドを Core Data の対応するオブジェクトに追加/更新して保存します。さらに、ユーザーが から離れて戻った場合でも、この選択を維持したいと考えていますSoundTableViewController
。
のindexPathのマーカーを使用して、行の「チェックとチェック解除」を機能させることができます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 から現在のオブジェクトに保存します
洞察や指針をいただければ幸いです。