13

UIPickerView で複数の行を選択したいので、データをテーブルに表示し、このテーブルをサブビューとしてピッカーに追加するという考えがありました。私はこれを試しましたが、成功しませんでした。

これを行う方法について何か提案はありますか?

4

6 に答える 6

14

UITapGestureRecognizerだけを使用して、UITableViewなしでそれを行うことができます:)

NSMutableArray *selectedItemsまた、 .hファイルのどこかに追加します。

- (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)];
        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 = [datasource objectAtIndex:row];
    cell.tag = row;

    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];
    }
}
于 2012-01-22T12:34:00.157 に答える
7

誰かが興味を持っている場合は、ピッカービューの前に他のビューを追加せずに UIPickerView 複数選択動作 (Mobile Safari のように) を取得するためのクイック ハックを実装しました: https://github.com/alexleutgoeb/ALPickerView

改善は大歓迎です!

于 2011-01-17T22:27:12.230 に答える
1
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{
       return true;
}

そして、このメソッドをオーバーライドする必要があります。そうしないと、ios9 から、タップ ジェスチャの認識が機能しなくなります。

于 2015-11-16T11:55:25.013 に答える