0

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

のindexPathのマーカーを使用して、行の「チェックとチェック解除」を機能させることができます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 に答える