Слушайте перетаскивание и замедление подпредставления UIPickerView. - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь расширить текущий компонент выбора для IOS в реагировать родной:

Я хотел бы добавить возможность прослушивать события startDragging и endDragging, startDecelerating и endDecelerating.

Я нашел там , что мы можем фактически знать, если пользовательв настоящее время перетаскивает Пикер, проверяя его подпредставления dragging и decelerating флаги.Это хорошо, но шаблон, подобный событию / делегату, лучше бы подходил для собственной модели мостов React.

Не могли бы вы подсказать, как прослушать изменения значений подпредставлений dragging и decelerating в Picker?

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

Вот что я пробовал до сих пор:

Я отредактировал файл Picker Manager и добавил это:

// ...

@implementation RCTPickerManager

RCT_EXPORT_MODULE()

- (UIView *)view
{
  //return [RCTPicker new];

  RCTPicker* picker = [RCTPicker new];

  [self setDelegateForScrollViews:picker];

  return picker;
}

// ...

RCT_EXPORT_VIEW_PROPERTY(onScrollChange, RCTBubblingEventBlock)

// ...

-(void)setDelegateForScrollViews:(UIView*)view
{
  if([view isKindOfClass:[UIScrollView class]]){
    UIScrollView* scroll_view = (UIScrollView*) view;
    RCTLogInfo(@"DEBUG setting a delegate on SV");
    scroll_view.delegate = self;
  }
  else {
    for(UIView *sub_view in [view subviews]){
      [self setDelegateForScrollViews:sub_view];
    }
  }
}

// UIScrollViewDelegate methods

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  RCTLogInfo(@"DEBUG scrollViewWillBeginDragging");
  ((RCTPicker*)self.view).onScrollChange(@{ @"state": [NSNumber numberWithBool:YES] });
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
                  willDecelerate:(BOOL)decelerate {
  RCTLogInfo(@"DEBUG scrollViewDidEndDragging");
  ((RCTPicker*)self.view).onScrollChange(@{ @"state": [NSNumber numberWithBool:NO] });
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  RCTLogInfo(@"DEBUG scrollViewDidEndDecelerating");
  // TODO
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
  RCTLogInfo(@"DEBUG scrollViewDidEndScrollingAnimation");
}

@end

Но методы UIScrollView Delegate никогда не вызываются, когда я прокручиваю средство выбора: (...

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 26 февраля 2019

Попробуйте создать подклассы представления выбора и реализовать методы делегата scrollview.Не забудьте позвонить super.Я не понимаю, почему вы хотите это сделать, хотя.Эти функции скрыты дизайном.Чего вы пытаетесь достичь этим?Даже если у вас есть уважительная причина, вам, вероятно, следует пересмотреть то, что вы пытаетесь сделать.Если вам действительно нужно знать, когда пользователь прокручивает, чтобы выбрать что-то, используйте UITableView, и вы можете получить его события делегата scrollview.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...