UIPickerView で複数の行を選択したいので、データをテーブルに表示し、このテーブルをサブビューとしてピッカーに追加するという考えがありました。私はこれを試しましたが、成功しませんでした。
これを行う方法について何か提案はありますか?
UIPickerView で複数の行を選択したいので、データをテーブルに表示し、このテーブルをサブビューとしてピッカーに追加するという考えがありました。私はこれを試しましたが、成功しませんでした。
これを行う方法について何か提案はありますか?
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];
}
}
誰かが興味を持っている場合は、ピッカービューの前に他のビューを追加せずに UIPickerView 複数選択動作 (Mobile Safari のように) を取得するためのクイック ハックを実装しました: https://github.com/alexleutgoeb/ALPickerView
改善は大歓迎です!
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return true;
}
そして、このメソッドをオーバーライドする必要があります。そうしないと、ios9 から、タップ ジェスチャの認識が機能しなくなります。