2012-02-21 29 views
0

私はしばらくの間、画面にUITableViewを表示しました。各セルには曲名とアーティスト名があります。バックグラウンドでは、各曲とアーティスト名がオンラインで検索されます(Spotify APIを使用)。ある曲を再生するURLを見つけて、次の曲に移動します。 :)シンプルに聞こえますが、私が欲しいのは、各曲が見つかったときにチェックマークのアクセサリーがその行に表示されることです。UITableViewへのアクセサリーの追加

は現在、私はこれを行うには、次のコードを持っている...

[[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:currentConnectionNumber inSection:0]] setAccessoryType:UITableViewCellAccessoryCheckmark]; 
[table setNeedsDisplay]; 

でも起こることすべては、すべての曲が発見されたとき、THENチェックマークが表示されます...なぜこれとあります一度に1つずつチェックマークを表示させるにはどうすればよいですか?

おかげ

答えて

1

は、その後、細胞をリロードあなたは

を使用してのtableViewをリロードしています[ yourtableView reloadData]

あなたのデータは変更されます。

+0

こんにちは、これは残念ながら働いていません。コードは適切なタイミングで実行され、cell.accessoryStyleが設定されます。しかし、それは更新されていません。 –

+0

私の間違いは、 'accessoryStyle'ではなく' accessoryType'でなければなりません。私は私の答えを修正しました。 –

+0

確かに、私はそれを修正しましたが、ワークフローの正しいポイントで実際にコードを実行していても、最後のリクエストが完了するまで変更はまだ発生していません... –

0

私はあなたがあなたの要件ごとにのためのブールフラグを設定し、

cellForRowAtIndexPathであなたのチェックマーク・ロジックを追加することができると思うのではなく、これを行う:

とそのフラグであればアクセサリーのチェックマークを追加します。あなたの要求は

- (void)myRequestFinished:(SomeKindOfWebRequest *)webRequest { 

    NSIndexPath *indexPathToReload = [self indexPathForWebRequest:webRequest]; // You need to implement this method 
    NSArray *indexPaths = [NSArray arrayWithObject:indexPathToReload]; 

    [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimtation:UITableViewRowAnimationNone]; 
} 
+0

こんにちは、残念ながらこれは機能しません。コードは適切なタイミングで実行され、cell.accessoryStyleが設定されます。しかし、それは更新されていません。 –

0

を終了するときは、tableView:cellForRowAtIndexPath:

- (void)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *reuseIdentifier = @"cell"; 
    UITableViewCell *cell = nil; 

    cell = [tableView dequeueReusableCellForIdentifier:reuseIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease]; 
    } 

    NSString *cellTitle = [self cellTitleForRowAtIndexPath:indexPath]; // You need to implement this method 
    BOOL hasURL = [self hasURLForRowAtIndexPath:indexPath]; // You need to implement this method 

    cell.textLabel.text = cellTitle; 

    if (hasURL) 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    else 
     cell.accessoryType = UITableViewCellAccessoryNone; 

    return cell; 
} 

にチェックマークを設定する必要が

if (isValid) { 

     cell.accessoryType = UITableViewCellAccessoryCheckmark; 

    } 
    else{ 

     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
+0

はい、ありがとうございます。それは間違っていますか? –

関連する問題