2

私のテーブルビューには4つのセクションがあり、各セクションに1つのチェックマークを付ける必要があります。そのようです...

  • セクション0
    • 行0
    • 行1
    • 行2/
    • 行3
  • セクション1
    • 行0
    • 行1/
    • 行2

等..

numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger numberOfRows;
if (section == 0) {
    numberOfRows = 3;
}
else if (section == 1) {
    numberOfRows = 4;
}
else if (section == 2) {
    numberOfRows = 4;
}
else if (section == 3) {
    numberOfRows = 3;
}
return numberOfRows;
}

cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *userChoices = @"UserChoices";
cell = [tableView dequeueReusableCellWithIdentifier:userChoices];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:userChoices];

if (indexPath.section == 0) {
    cell.textLabel.text = [mail objectAtIndex:indexPath.row];
}
else if (indexPath.section == 1) {
    cell.textLabel.text = [search objectAtIndex:indexPath.row];
}
else if (indexPath.section == 2) {
    cell.textLabel.text = [social objectAtIndex:indexPath.row];
}
else if (indexPath.section == 3) {
    cell.textLabel.text = [maps objectAtIndex:indexPath.row];
}

if([self.checkedIndexPath isEqual:indexPath])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}

return cell;

}

didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Uncheck the previous checked row
UITableViewCell* uncheckCell = [tableView cellForRowAtIndexPath:self.checkedIndexPath];
if(self.checkedIndexPath)
{
    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}

if([self.checkedIndexPath isEqual:indexPath])
{
    self.checkedIndexPath = nil;
}
else
{
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    self.checkedIndexPath = indexPath;
}

// use this to put checkmark on the item
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

次のコードは、テーブルのすべてのセクション内のセルの横にチェックマークを付けます。どんな体にもアイデアはありますか?

4

4 に答える 4

0

配列内の要素によって表されるセクション内の選択された要素の整数表現を含むNSNumbersのNSMutableArrayを作成します。

あなたはもう少しセットアップをしなければならないでしょう、しかしあなたがチェックするとき

if([self.checkedIndexPath isEqual:indexPath])

確認してもいい

if([[yourArrayOfCheckedIndexes objectAtIndex:indexPath.section] integerValue] == indexPath.row)

基本的に、すべてのセクションのチェック済みインデックスを保存する必要があります

于 2012-11-08T19:18:36.783 に答える
0

辞書を使用して、各セクションでチェックされている行を追跡できます。

NSMutableDictionary *_checkedRowsDict = [NSMutableDictionary dictionaryWithCapacity:numberOfSections];

...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([_checkedRowsDict objectForKey:[NSNumber numberWithInt:indexPath.section]]) {
        // Unmark the row found on _checkedRowsDict
        NSNumber *num = [_checkedRowsDict objectForKey:[NSNumber numberWithInt:indexPath.section]];
        int row = [num intValue];
        NSIndexPath *checkIndexPath = [NSIndexPath indexPathForRow:row inSection:indexPath.section];

        UITableViewCell *checkedCell = [tableView cellForRowAtIndexPath:checkIndexPath];
        checkedCell.accessoryType = UITableViewCellAccessoryNone;
    }

    // Mark the selected row
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;

    // Update _checkedRowsDict
    [_checkedRowsDict setObject:[NSNumber numberWithInt:indexPath.row] forKey:[NSNumber numberWithInt:indexPath.section]];

    ...

}

そして、上の行を初期化するのに似たものtableView:cellForRowAtIndexPath:

于 2012-11-08T21:09:34.080 に答える
0

これを試してみてください、私にとってはうまくいきました:

-変数:

@property NSInteger checkedCellRow;
@property NSInteger checkedCellSection;

-関数:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (checkedCellSection == indexPath.section)
{
if (checkedCellRow == indexPath.row)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
checkedCellRow = indexPath.row;
checkedCellSection = indexPath.section;
[myTable reloadData];
}
于 2015-01-16T14:48:45.787 に答える
-1

これをviewDidLoadに追加すると、すべて正常に機能します。どうも。

-(void)viewDidLoad {
NSUInteger i = 2; //Number of section
NSMutableDictionary *_checkedRowsDict = [NSMutableDictionary dictionaryWithCapacity:i];
...
}
于 2013-03-14T12:35:45.980 に答える