UIPickerView нажмите, чтобы прокрутить и пользовательские строки UIViews - PullRequest
4 голосов
/ 26 августа 2010

Вы можете прокручивать UIPickerView, проводя пальцами и нажимая элементы под или над поясом выбора.

Вы можете заполнить UIPickerView, указав NSString в качестве заголовков или повторно используемых UIViews для каждой строки.

Что я заметил, так это то, что когда я переключился с предоставления строк на предоставление представления, касание для прокрутки больше не работало.Это ожидаемое поведение.Должны ли мои взгляды пересылать некоторые события касания в UIPickerView?

Спасибо

РЕДАКТИРОВАТЬ:

Вот пример кода из моей реализации:

// Creating the picker
screenPicker_ = [UIPickerView new];
screenPicker_.showsSelectionIndicator = YES;
screenPicker_.delegate = delegate_;
screenPicker_.dataSource = delegate_;
[self addSubview:screenPicker_];
[screenPicker_ release];

// Row view creation delegate
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    PickerRowView *pickerRowView = (PickerRowView*)view;
    if(view == nil)
    {
        pickerRowView = [[PickerRowView alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, PICKER_ROW_HEIGHT)];
    }

    [pickerRowView SetTitle:@"some title"];

    return pickerRowView;
}

// initailizer of the PickerRowView class (an UIView subclass)
- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        CGFloat titleHeight = frame.size.height * CONTENT_TO_FRAME_RATIO;
        title_ = [[UILabel alloc] initWithFrame:CGRectMake(TITLE_X, (frame.size.height - titleHeight) / 2, frame.size.width, titleHeight)];
        [title_ setFont:[UIFont fontWithName:@"StainlessExt-Light" size:titleHeight]];
        title_.backgroundColor = [UIColor clearColor];
        [self addSubview:title_];
        [title_ release];

        self.userInteractionEnabled = NO;
    }
    return self;
}

Ответы [ 2 ]

6 голосов
/ 28 августа 2010

Установка свойства userInteractionEnabled на NO для ваших представлений строк должна решить вашу проблему.

0 голосов
/ 14 октября 2010

В вашем классе PickerRowView определите следующий метод:

- (void)didMoveToSuperview {
if ([[self superview] respondsToSelector:@selector(setShowSelection:)])
{
    [[self superview] performSelector:@selector(setShowSelection:) withObject:NO];
} }

и это должно избавить от выделения

...