配列の値を表示する uitableview があります。各セルがタップされた回数に基づいて、テーブル セルのサブタイトルを更新する方法があるかどうかを知りたいです。
ありがとうございました!
配列の値を表示する uitableview があります。各セルがタップされた回数に基づいて、テーブル セルのサブタイトルを更新する方法があるかどうかを知りたいです。
ありがとうございました!
まず、NSMutableArray
インスタンス化後にその内容を変更できるように、 a を使用する必要があります。意図した結果を達成するために私が試みたことの基本的な概要を次に示します。
あなたのインターフェースで
@property (strong, nonatomic) NSMutableArray *tapCountArray;
あなたの実装では
- (void)viewDidLoad
{
[super viewDidLoad];
self.tapCountArray = [NSMutableArray new];
int numberOfRows = 20;
for (int i = 0; i < numberOfRows; i ++) {
[self.tapCountArray addObject:@(0)];
}
}
それから重要な部分!
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.tapCountArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSString *text = [self.tapCountArray[indexPath.row] stringValue];
[cell.textLabel setText:text];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tapCountArray replaceObjectAtIndex:indexPath.row withObject:@([self.tapCountArray[indexPath.row] intValue] + 1)];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
各セルがタップさdetailTextLabel
れると、その中の数字が 1 ずつ増えます。
2 つのアレイが互いに同期しなくなった場合に問題が発生する可能性があるため、新しいアレイまたはセットを作成しないでください。コメントで提案したように、それを行う方法は辞書を使用することです。しかし、あなたが言った方法はおそらくそうではありません。1 つのキーの値がメイン データであり、もう 1 つのキーの値がタップ数である辞書の配列が必要です。たとえば、メインとサブの 2 つのキーを呼び出すと、メイン データは一連の名前になります。辞書の配列は次のようになります: ({main:@"Tom",sub:1}, {main:@"Dick", sub:0}, {main:@"Harry",sub:2}, . ....)。tableView:cellForRowAtIndexPath:indexPath メソッドでは、次のようにデータをセルに提供します。
cell.textLabel.text = [[array objectAtIndex:indexPath.row] valueForKey:@"main"];
cell.detailTextLabel.text = [[array objectAtIndex:indexPath.row] valueForKey:@"sub"];
オブジェクトを NSCountedSet に挿入できます。cellForRowAtIndexPath メソッドで、セルのモデル オブジェクトを取得し、NSCountedSet インスタンスに挿入された回数を確認します。
NSCountedSet のドキュメントをご覧ください: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html
現在持っているものと同じ長さの別の配列を設定するだけでよいと思います。次に、didSelectRowAtIndexPath
トリガーされたらindexPath.row
、新しい配列のエントリをインクリメントし、そのセルを更新します。テーブルをシャッフルする予定がない場合は、辞書は必要ありません。