UIPickerView получить элемент «нажал»? - PullRequest
2 голосов
/ 06 сентября 2010

Я использую повернутый UIPickerView, чтобы использовать его горизонтально.Пока все работает нормально.

Теперь я хочу получить вид / заголовок строки "clicked" UIPickerView.Делегат дает мне возможность получить «selectedRow», когда сборщик выбирает строку.Я не хочу события при выборе, мне нужно событие щелчка по нему.

Самое смешное, я уже могу щелкнуть элементы.я не добавил ни кнопки, ни чего-либо еще.«нажатые» элементы / строки выделяются как кнопка.Но где я должен прикрепить слушатель события?или как я могу получить какие-либо из этих событий?

Я также попытался добавить кнопки в качестве представления в uipickerview.Пока это работает, но я не могу нажать ни одну кнопку.

Нужна ли мне кнопка в виде View в строке UIPickerView, чтобы получить событие touchupinside, или я могу использовать обычный элемент строки UIPickerViewтакое событие?

спасибо за любую помощь!

Ответы [ 4 ]

8 голосов
/ 25 ноября 2011

Это очень просто:

- (void)viewDidLoad {
    picker.userInteractionEnabled = YES;
    UITapGestureRecognizer *tapGesture =[[UITapGestureRecognizer alloc] initWithTarget:self 
                                                                                        action:@selector(pickerTap)];
    [picker addGestureRecognizer:tapGesture];
    [tapGesture release];
}

- (void)pickerTap {
    NSLog(@"Picker tapped"); 
}

Вам не нужно создавать подкласс UIPickerView.

0 голосов
/ 09 ноября 2013

отметьте этот пост , возможно, это не точное решение, которое вы ищете, но это помогает.

Первоначально я реализовал щелчок для выбора, добавив прозрачную кнопку с индексом строки в качестве тега в каждом элементе выбора. Он больше не работает на iOS 7 и должен найти новое решение.

0 голосов
/ 06 сентября 2010

вы можете настроить pickerView и наследовать метод сенсорного события.

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event {
    if (!self.dragging) {
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    }       
    //here u can keep track of touch event(click ,double click)
    [super touchesEnded: touches withEvent: event];
}
0 голосов
/ 06 сентября 2010

Когда вы нажимаете на элемент, он будет выбран автоматически. Таким образом, метод selecetedRow будет достаточно хорош, также он даст вам правильный элемент при перелистывании (что не произойдет с подходом «щелчка»).

Чтобы получить события UIPickerView, вы можете настроить свой контроллер на соответствие протоколам UIPickerViewDataSource и UIPickerViewDelegate и установить делегат и источник данных средства выбора для контроллера. Таким образом, вы можете установить содержимое pickerView с помощью таких методов, как

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

и получите событие:

– selectedRowInComponent:
...