Я пытаюсь расширить текущий компонент выбора для 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 никогда не вызываются, когда я прокручиваю средство выбора: (...
У кого-нибудь есть идеи?