2011-01-25 5 views
3

Я добавил UIPickerView в UIScrollView, но теперь UPickerView не прокручивается. Когда я добавляю его в self.view, он плавно прокручивается. Вот я мой кодUIPickerView не прокручивается при добавлении в UIScrollView!

monthsArray = [[NSArray alloc] initWithObjects:@"Jan",@"Feb",@"Mar",@"Apr",@"May",@"Jun",@"Jul",@"Aug",@"Sep",@"Oct",@"Nov",@"Dec",nil]; 

UIPickerView *objPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(185,350,100,100)]; 
    objPickerView.userInteractionEnabled=YES; 
    objPickerView.delegate = self; 
    objPickerView.showsSelectionIndicator = YES; 
    [objScrollView addSubView:objPickerView]; 

Я включил delegete и его методы. взгляните на эту проблему. Заранее спасибо.
Если я не знаю, скажите, пожалуйста.

+0

Могу использовать обновление Swift 3 для этого решения – Jeeves

ответ

0

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

+0

im: Я думаю, что u пропустил массив. Я добавил содержимое массива в качестве заголовка для каждой строки. Теперь вы можете сказать мне, как выбрать «Дек» без scrollibf UIPickerView? – Developer

+0

Сборщик сам по себе прокрутит. Scrollview мог бы, если вообще, переместить сборщик в целом по экрану. – Axel

+0

@Axel: «Сборщик сам по себе выполняет прокрутку» Я знаю это, но не прокручиваю его, когда добавляю его в UIScrollView. – Developer

1

Из документации класса UIScrollView:

Важно: Вы не должны вставлять UIWebView или UITableView объекты в объектах UIScrollView. Если вы это сделаете, может возникнуть непредвиденное поведение, потому что события касания для двух объектов могут быть перемешаны и неправильно обработаны.

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

1

Я предполагаю, что это может решить вашу проблему (не забудьте проверить комментарии тоже):

http://www.alexc.me/uiscrollview-and-uidatepicker/153/

В принципе, вы должны задать DelaysContentTouches и CanCancelContentTouches к NO на представлении прокрутки, как он крадет прикосновение события от сборщика.

0

У меня была аналогичная проблема с UIPickerView, вложенным в UIScrollView, и была решена путем подкласса UIPickerView. Изменения в задержкахContentTouches/CanCancelContentTouches не помогли, а другие «ответы» здесь, которые в основном говорят «не делай этого» - ну, это не ответ! Это можно сделать, и вы можете заставить сборщика вести себя в scrollView.

Я ответил на следующий вопрос о подклассах UIPickerView, включая некоторый код в конце, который может помочь вам:

Responding to touchesBegan in UIPickerView instead of UIView

3

Я использую подкласс UIPickerView для тех же целей, но мой гораздо проще :

@implementation ScrollablePickerView 

- (UIScrollView *)findScrollableSuperview { 

    UIView *parent = self.superview; 
    while ((nil != parent) && (![parent isKindOfClass:[UIScrollView class]])) { 
     parent = parent.superview; 
    } 
    UIScrollView* scrollView = (UIScrollView *)parent; 

    return scrollView; 
} 

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event { 
    UIScrollView* scrollView = [self findScrollableSuperview]; 

    if (CGRectContainsPoint(self.bounds, point)) { 
     scrollView.canCancelContentTouches = NO; 
     scrollView.delaysContentTouches = NO; 
    } else { 
     scrollView.canCancelContentTouches = YES; 
     scrollView.delaysContentTouches = YES; 
    } 

    return [super hitTest:point withEvent:event]; 
} 

@end 

Работает как очарование - по крайней мере, для меня.

+0

Я пробовал это, и он отлично работает. Благодаря! – Archie

+0

Любой способ обновить это для Swift (3)? – Jeeves

+0

Erm ... проект в настоящий момент заброшен, и у меня нет тестовой кровати Swift. Пожалуйста, не ожидайте от меня обновления от меня на время. Сожалею. – Christoph

0

У меня возникла аналогичная проблема. У меня есть UIPickerView, который я поворачивал горизонтально, применяя преобразование (которое работает очень хорошо), однако внутри прокрутки, прокрутка работает только с левой стороны.

Я думаю, что UIPicker ищет родительскую цепочку, чтобы увидеть, есть ли какие-либо распознаватели жестов, и устанавливает себя как делегат, поэтому он может отключить распознавание жестов дальше цепи для касаний внутри своих границ, и в то время как преобразование изменяет визуальные границы, оно не меняет рамки, оно ищет штрихи в своих собственных границах.

Если это не то, что происходит, вы можете использовать это, чтобы предотвратить просмотр прокрутки при краже ваших прикосновений.

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

Смежные вопросы