2

ここ StackOverflow の真新しいポスター。私はここでしばらく読んで学んでいますが、いくつかの質問をして対話を始める必要があるので、私の問題のいくつかについて何か助けていただければ幸いです.

基本的に、cellForRowAtIndexPath の plist からデフォルト サウンドの tableView にリストを生成します。これにより、「x」と言う音のリストが生成され、それらの音の 1 つにデフォルトのチェックマーク アクセサリがセルに配置されます。「アクティブな」サウンド ファイルのインデックス値を格納する plist ファイルがあります。これが、生成された tableView に元のチェックマークを付ける方法です。したがって、以下のコードでは、ご覧のとおり、「アクティブな」サウンド インデックスの plist の値を読み込みますが、ユーザーが tableView を操作して新しいサウンドを選択すると、デフォルトのチェックマークを配置する必要があります。ビューから削除されました。他のすべては正常に機能しています。この単純な問題を解決できないようです。単純な構文の問題だと確信しています。どうすれば解決できるのかわかりません。解決策は1行または2行のコードであり、私の鼻の下にあると確信しています。事前に助けてくれてありがとう。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSDictionary *dictionarySound = [NSDictionary dictionaryWithContentsOfFile:[self ActDataFilePath]];

NSNumber *defaultSoundIndex = [dictionarySound valueForKey:@"soundIndex"];

int theIntVal = [defaultSoundIndex integerValue]; 

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

//Everything below works just fine, checkmarks are removed and placed accordingly, sounds are played just fine.  I just need help above in removing the default checkmark

if(self.checkedPath)
{        
    UITableViewCell *uncheckCell = [tableView cellForRowAtIndexPath:self.checkedPath];

    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}


cell.accessoryType = UITableViewCellAccessoryCheckmark;

self.checkedPath = indexPath;

.......下の他のコードは、クリック時にサウンドを再生し、新しくアクティブになったサウンド名とインデックス値を plist に保存します。

4

3 に答える 3

0

次のコードを試してください

cell.accessoryType = UITableViewCellAccessoryNone;
于 2012-04-05T04:39:36.717 に答える
0

さて、男の子と女の子、これが私自身の質問に対する解決策です。

plistファイルに基づいてテーブルが構築されると、最初にチェックマークが決定され、cellForRowAtIndexPathに配置されます。これは、plist データを取得し、テーブルを構築し、デフォルトの選択をチェックマークで設定する cellForRowAtIndexPath のコードです。

NSDictionary *dicSound = [NSDictionary dictionaryWithContentsOfFile:[self ActDataFilePath]];

NSNumber *defaultSoundIndex = [dicSound valueForKey:@"soundIndex"];

//conversion of NSNumber to integer for comparison below to indexPath.row, both need to be int's
int theIntVal = [defaultSoundIndex integerValue];

static NSString *CheckMarkCellIdentifier = @"CheckMarkCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CheckMarkCellIdentifier];

cell.textLabel.text = [[MyArray objectAtIndex:indexPath.row] objectForKey:@"name"];

if(indexPath.row == theIntVal)
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

}
else 
{
   cell.accessoryType = UITableViewCellAccessoryNone;

}

return cell;

ユーザーが別のセルをクリックして tableView を操作し、didSelectRowAtIndexPath が作動すると、これが新しいチェックマークを配置する方法であり、古いセルにアクセサリ チェックマークがないように設定する方法です。

//This is a dictionary file that contains a number of values I need to grab
NSDictionary *dictionarySound = [NSDictionary dictionaryWithContentsOfFile:[self ActDataFilePath]];

NSNumber *defaultSoundIndex = [dictionarySound valueForKey:@"soundIndex"];

//conversion of NSNumber to integer for comparison below to indexPath.row, both need to be int's

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];               

if(self.checkedPath)
{        
    UITableViewCell *uncheckCell = [tableView cellForRowAtIndexPath:self.checkedPath];

    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}

cell.accessoryType = UITableViewCellAccessoryCheckmark;

self.checkedPath = indexPath;

//THE FIX
[tableView reloadData];

ここで重要なのは [tableView reloadData] です。新しいオプションがチェックされた状態でテーブルをリロードし、元のチェックマークを削除します。明らかに、データをリロードしています。つまり、plist ファイルに永続性が組み込まれています。私は基本的に、ユーザーがセルをクリックするたびに「soundIndex」のローカル辞書の値を更新し、それを永続的な plist ファイルに書き込みます。

これが、この問題を抱えている他の人の助けになることを願っています。

于 2012-04-05T07:41:58.483 に答える
0

これに対処する通常の方法は、didSelectRowAtIndexPath: を使用して、選択が変更されたという事実を記録し、テーブル ビューにデータをリロードするように指示します。

テーブルのスクロールが可能な場合、他の方法は失敗する傾向があります。

于 2012-04-04T22:13:48.540 に答える