1

私はこのコードをオンラインで見つけましたが、基本的に私がやりたいこととは反対のことをしていることに驚いています。ここに方法があります...

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UITableViewCell *cell = (UITableViewCell *)view;

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
        [cell setBackgroundColor:[UIColor clearColor]];
        [cell setBounds: CGRectMake(0, 0, cell.frame.size.width -20 , 44)];
        cell.tag = row;
        UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleSelection:)];
        singleTapGestureRecognizer.numberOfTapsRequired = 1;
        [cell addGestureRecognizer:singleTapGestureRecognizer];
    }

    if ([selectedItems indexOfObject:[NSNumber numberWithInt:row]] != NSNotFound) {
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
    cell.textLabel.text = @"Joe";

    return cell;
}

- (void)toggleSelection:(UITapGestureRecognizer *)recognizer {
    NSNumber *row = [NSNumber numberWithInt:recognizer.view.tag];
    NSUInteger index = [selectedItems indexOfObject:row];
    if (index != NSNotFound) {
        [selectedItems removeObjectAtIndex:index];
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryNone];
    } else {
        [selectedItems addObject:row];
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryCheckmark];
    }
}

結果は、各 UIPickerView 項目による単純なチェックマークです。これは素晴らしいことですが、デフォルトでは、 PickerView のすべての要素が選択されているため、チェックマークが表示されます (コードで特に選択したものを除いて、どれも選択しないでください)。私の方法を編集して、私がやっていることをどのように行うかを考えてみてください。

また、ユーザーがコードで選択した要素をどのように確認できるのでしょうか。ヘルプ!

4

2 に答える 2

1

このブロックから判断すると、と呼ばれる配列が格納されており、行に対応するオブジェクトselectedItemsが含まれています。NSNumber

if ([selectedItems indexOfObject:[NSNumber numberWithInt:row]] != NSNotFound) {
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
} else {
    [cell setAccessoryType:UITableViewCellAccessoryNone];
}

rowstartsがチェックされている場合、すべての行のオブジェクトselectedItemsを含むように初期化する必要があります。NSNumber代わりに、空になるように初期化してみてください。選択されたものを読み取るには、コンテンツ番号を繰り返し処理します。

于 2012-04-08T01:55:33.740 に答える
0

多分これが役立つかもしれません:

UITableView を使用して、選択時または選択解除時にセルアクセサリの種類を切り替えます。

cell.accessoryType = UITableViewCellAccessoryCheckmark
于 2012-04-08T03:12:45.900 に答える