Add blur and focus native commands to TextInput
Summary: Add Native Commands handlers to TextInput. It is intentionally done in a way so that it can be easily swapped for codegened implementation once we properly type TextInput. We also add native commands to view managers for backwards compatibility. Changelog: [Internal] Reviewed By: TheSavior, shergin Differential Revision: D19412026 fbshipit-source-id: 8dc64275cf1da599b1bd5992a41035d51dd4148f
This commit is contained in:
Родитель
291b45b686
Коммит
f43c9316e1
|
@ -6,7 +6,6 @@
|
|||
*/
|
||||
|
||||
#import <React/RCTMultilineTextInputViewManager.h>
|
||||
|
||||
#import <React/RCTMultilineTextInputView.h>
|
||||
|
||||
@implementation RCTMultilineTextInputViewManager
|
||||
|
|
|
@ -100,6 +100,22 @@ RCT_CUSTOM_VIEW_PROPERTY(multiline, BOOL, UIView)
|
|||
lazilyLoadIfNecessary:YES]];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(focus : (nonnull NSNumber *)viewTag)
|
||||
{
|
||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
||||
UIView *view = viewRegistry[viewTag];
|
||||
[view reactFocus];
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(blur : (nonnull NSNumber *)viewTag)
|
||||
{
|
||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
|
||||
UIView *view = viewRegistry[viewTag];
|
||||
[view reactBlur];
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - RCTUIManagerObserver
|
||||
|
||||
- (void)uiManagerWillPerformMounting:(__unused RCTUIManager *)uiManager
|
||||
|
|
|
@ -17,11 +17,12 @@
|
|||
#import <React/RCTUITextView.h>
|
||||
|
||||
#import "RCTConversions.h"
|
||||
#import "RCTTextInputNativeCommands.h"
|
||||
#import "RCTTextInputUtils.h"
|
||||
|
||||
using namespace facebook::react;
|
||||
|
||||
@interface RCTTextInputComponentView () <RCTBackedTextInputDelegate>
|
||||
@interface RCTTextInputComponentView () <RCTBackedTextInputDelegate, RCTTextInputViewProtocol>
|
||||
@end
|
||||
|
||||
@implementation RCTTextInputComponentView {
|
||||
|
@ -342,4 +343,21 @@ using namespace facebook::react;
|
|||
return AttributedString::Range{(int)start, (int)(end - start)};
|
||||
}
|
||||
|
||||
#pragma mark - Native Commands
|
||||
|
||||
- (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args
|
||||
{
|
||||
RCTTextInputHandleCommand(self, commandName, args);
|
||||
}
|
||||
|
||||
- (void)focus
|
||||
{
|
||||
[_backedTextInputView becomeFirstResponder];
|
||||
}
|
||||
|
||||
- (void)blur
|
||||
{
|
||||
[_backedTextInputView resignFirstResponder];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <React/RCTDefines.h>
|
||||
#import <React/RCTLog.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol RCTTextInputViewProtocol <NSObject>
|
||||
- (void)focus;
|
||||
- (void)blur;
|
||||
@end
|
||||
|
||||
RCT_EXTERN inline void
|
||||
RCTTextInputHandleCommand(id<RCTTextInputViewProtocol> componentView, NSString const *commandName, NSArray const *args)
|
||||
{
|
||||
if ([commandName isEqualToString:@"focus"]) {
|
||||
#if RCT_DEBUG
|
||||
if ([args count] != 0) {
|
||||
RCTLogError(
|
||||
@"%@ command %@ received %d arguments, expected %d.", @"TextInput", commandName, (int)[args count], 0);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
[componentView focus];
|
||||
return;
|
||||
}
|
||||
|
||||
if ([commandName isEqualToString:@"blur"]) {
|
||||
#if RCT_DEBUG
|
||||
if ([args count] != 0) {
|
||||
RCTLogError(
|
||||
@"%@ command %@ received %d arguments, expected %d.", @"TextInput", commandName, (int)[args count], 0);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
[componentView blur];
|
||||
return;
|
||||
}
|
||||
|
||||
#if RCT_DEBUG
|
||||
RCTLogError(@"%@ received command %@, which is not a supported command.", @"TextInput", commandName);
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
Загрузка…
Ссылка в новой задаче