diff --git a/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m b/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m index 800bd35..8fcd559 100644 --- a/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m +++ b/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m @@ -49,6 +49,7 @@ @interface KeyboardTrackingView : UIView @property (nonatomic) CGFloat originalHeight; @property (nonatomic) KeyboardTrackingScrollBehavior scrollBehavior; @property (nonatomic) BOOL addBottomView; +@property (nonatomic) NSString* bottomViewColor; @property (nonatomic) BOOL scrollToFocusedInput; @property (nonatomic) BOOL allowHitsOutsideBounds; @@ -79,6 +80,7 @@ -(instancetype)init _bottomViewHeight = kBottomViewHeight; self.addBottomView = NO; + self.bottomViewColor = nil; self.scrollToFocusedInput = NO; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rctContentDidAppearNotification:) name:RCTContentDidAppearNotification object:nil]; @@ -170,6 +172,7 @@ - (void)initializeAccessoryViewsAndHandleInsets for (UIView* subview in allSubviews) { + NSString* className = NSStringFromClass([subview class]); if(_manageScrollView) { if(_scrollViewToManage == nil) @@ -195,7 +198,7 @@ - (void)initializeAccessoryViewsAndHandleInsets } } - if ([subview isKindOfClass:NSClassFromString(@"RCTTextField")]) + if ([className isEqualToString:@"RCTTextField"]) { UITextField *textField = nil; Ivar backedTextInputIvar = class_getInstanceVariable([subview class], "_backedTextInput"); @@ -209,15 +212,15 @@ - (void)initializeAccessoryViewsAndHandleInsets } [self setupTextField:textField]; } - else if ([subview isKindOfClass:NSClassFromString(@"RCTUITextField")] && [subview isKindOfClass:[UITextField class]]) + else if ([className isEqualToString:@"RCTUITextField"]) { [self setupTextField:(UITextField*)subview]; } - else if ([subview isKindOfClass:NSClassFromString(@"RCTMultilineTextInputView")]) + else if ([className isEqualToString:@"RCTMultilineTextInputView"]) { [self setupTextView:[subview valueForKey:@"_backedTextInputView"]]; } - else if ([subview isKindOfClass:NSClassFromString(@"RCTTextView")]) + else if ([className isEqualToString:@"RCTTextView"]) { UITextView *textView = nil; Ivar backedTextInputIvar = class_getInstanceVariable([subview class], "_backedTextInput"); @@ -231,7 +234,7 @@ - (void)initializeAccessoryViewsAndHandleInsets } [self setupTextView:textView]; } - else if ([subview isKindOfClass:NSClassFromString(@"RCTUITextView")] && [subview isKindOfClass:[UITextView class]]) + else if ([className isEqualToString:@"RCTUITextView"]) { [self setupTextView:(UITextView*)subview]; } @@ -266,6 +269,13 @@ - (void)initializeAccessoryViewsAndHandleInsets [self addBottomViewIfNecessary]; } +- (void)resetTracking +{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self deferedInitializeAccessoryViewsAndHandleInsets]; + }); +} + - (void)setupTextView:(UITextView*)textView { if (textView != nil) @@ -442,12 +452,28 @@ -(void)setAddBottomView:(BOOL)addBottomView [self addBottomViewIfNecessary]; } +-(UIColor *)colorFromHexString:(NSString *)hexString +{ + unsigned rgbValue = 0; + NSScanner *scanner = [NSScanner scannerWithString:hexString]; + [scanner setScanLocation:1]; // bypass '#' character + [scanner scanHexInt:&rgbValue]; + return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; +} + -(void)addBottomViewIfNecessary { if (self.addBottomView && _bottomView == nil) { _bottomView = [UIView new]; - _bottomView.backgroundColor = [UIColor whiteColor]; + if (self.bottomViewColor) + { + _bottomView.backgroundColor = [self colorFromHexString:self.bottomViewColor]; + } + else + { + _bottomView.backgroundColor = [UIColor whiteColor]; + } [self addSubview:_bottomView]; [self updateBottomViewFrame]; } @@ -631,6 +657,7 @@ @implementation KeyboardTrackingViewManager RCT_REMAP_VIEW_PROPERTY(manageScrollView, manageScrollView, BOOL) RCT_REMAP_VIEW_PROPERTY(requiresSameParentToManageScrollView, requiresSameParentToManageScrollView, BOOL) RCT_REMAP_VIEW_PROPERTY(addBottomView, addBottomView, BOOL) +RCT_REMAP_VIEW_PROPERTY(bottomViewColor, bottomViewColor, NSString) RCT_REMAP_VIEW_PROPERTY(scrollToFocusedInput, scrollToFocusedInput, BOOL) RCT_REMAP_VIEW_PROPERTY(allowHitsOutsideBounds, allowHitsOutsideBounds, BOOL) @@ -687,6 +714,21 @@ - (UIView *)view }]; } +RCT_EXPORT_METHOD(resetTracking:(nonnull NSNumber *)reactTag) +{ + [self.bridge.uiManager addUIBlock: + ^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { + + KeyboardTrackingView *view = viewRegistry[reactTag]; + if (!view || ![view isKindOfClass:[KeyboardTrackingView class]]) { + RCTLogError(@"Error: cannot find KeyboardTrackingView with tag #%@", reactTag); + return; + } + + [view resetTracking]; + }]; +} + #pragma mark - helper methods -(void)rejectPromise:(RCTPromiseRejectBlock)reject withErrorMessage:(NSString*)errorMessage errorCode:(NSInteger)errorCode diff --git a/node_modules/react-native-keyboard-tracking-view/react-native-keyboard-tracking-view.podspec b/node_modules/react-native-keyboard-tracking-view/react-native-keyboard-tracking-view.podspec new file mode 100644 index 0000000..a6dbe01 --- /dev/null +++ b/node_modules/react-native-keyboard-tracking-view/react-native-keyboard-tracking-view.podspec @@ -0,0 +1,19 @@ +require 'json' + +package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + +Pod::Spec.new do |s| + s.name = package['name'] + s.version = package['version'] + s.summary = package['description'] + s.license = package['license'] + + s.authors = package['author'] + s.homepage = package['homepage'] + s.platform = :ios, "9.0" + + s.source = { :git => "https://github.com/wix/react-native-keyboard-tracking-view.git", :tag => "v#{s.version}" } + s.source_files = "lib/**/*.{h,m}" + + s.dependency 'React' +end \ No newline at end of file diff --git a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js index af15edf..1e1bd35 100644 --- a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js +++ b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.android.js @@ -14,4 +14,5 @@ export default class KeyboardTrackingView extends PureComponent { return {trackingViewHeight: 0, keyboardHeight: 0, contentTopInset: 0}; } scrollToStart() {} + resetTracking() {} } diff --git a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js index 5e2c207..43bc252 100644 --- a/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js +++ b/node_modules/react-native-keyboard-tracking-view/src/KeyboardTrackingView.ios.js @@ -30,4 +30,10 @@ export default class KeyboardTrackingView extends PureComponent { KeyboardTrackingViewManager.scrollToStart(ReactNative.findNodeHandle(this.ref)); } } + + resetTracking() { + if (this.ref && KeyboardTrackingViewManager && KeyboardTrackingViewManager.resetTracking) { + KeyboardTrackingViewManager.resetTracking(ReactNative.findNodeHandle(this.ref)); + } + } }