0

の単一選択のチェックリストを実装したいUITableView。また、デフォルトでセルを選択する必要があります。これが私の実装ですcellForRowAtIndexPath

NSUInteger row = [indexPath row];
NSUInteger oldRow = [lastIndexPath row];    
cell.accessoryType = (row == oldRow && lastIndexPath != nil) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

if (indexPath.row == selectedRow ) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
 }
else {
    cell.accessoryType = UITableViewCellAccessoryNone;
 }

didSelectRowAtIndexPathこのコードがあります:

if (!self.lastIndexPath) {
    self.lastIndexPath = indexPath;
}

if ([self.lastIndexPath row] != [indexPath row])
{
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath: indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:self.lastIndexPath]; 
    oldCell.accessoryType = UITableViewCellAccessoryNone;

    self.lastIndexPath = indexPath;  
}
else {
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath: indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;
}

このコードを使用すると、デフォルトのチェックマークを取得できますが、別の行を選択すると、そのセルをクリックしないまで最初の行が選択されたままになります。それで、希望する結果を選択したい場合はどうすればよいですか?

`

4

1 に答える 1

2

コードは少し複雑すぎると思います。必要なのは単一のプロパティだけです。

NSInteger _selectedRow;

これは、最初に定義されたときに、デフォルトで選択された行を提供します。また、以前の選択を維持します(「選択解除」するセルを検索する場合)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_IDENTIFIER];
    }

    if ([indexPath row] == _selectedRow) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

    cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (_selectedRow >= 0) {
        [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:_selectedRow inSection:0]].accessoryType = UITableViewCellAccessoryNone;
    }
    _selectedRow = [indexPath row];
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

このビューが作成されるときに、以下を割り当てる場合:

_selectedRow = 1;

次に、2番目の行が自動的に選択されます。の値は-1デフォルトの選択がないことを示し、上記の2つの方法は、タップされた行からチェックマークを自動的に追加/削除します。

于 2012-09-13T19:14:05.050 に答える