feat:input add onSubmitEditing

This commit is contained in:
pengfei.zhou
2021-06-11 15:17:20 +08:00
committed by osborn
parent ff641bf983
commit 5263731dd7
12 changed files with 239 additions and 49 deletions

View File

@@ -28,6 +28,8 @@
typedef void (^onFocusChangeBlock)(BOOL focused, DoricInputNode *node);
typedef void (^onSubmitEditingBlock)(NSString *text, DoricInputNode *node);
@implementation DoricInputView
- (instancetype)init {
@@ -71,7 +73,8 @@ - (CGSize)sizeThatFits:(CGSize)size {
@interface DoricInputNode () <UITextViewDelegate>
@property(nonatomic, copy) onTextChangeBlock onTextChange;
@property(nonatomic, copy) onFocusChangeBlock onFocusShange;
@property(nonatomic, copy) onFocusChangeBlock onFocusChange;
@property(nonatomic, copy) onSubmitEditingBlock onSubmitEditing;
@property(nonatomic, strong) NSNumber *maxLength;
@end
@@ -107,6 +110,9 @@ - (void)blendView:(DoricInputView *)view forPropName:(NSString *)name propValue:
BOOL value = [(NSNumber *) prop boolValue];
if (!value) {
view.textContainer.maximumNumberOfLines = 1;
if (view.text.length > 0) {
view.text = [view.text stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
}
} else {
view.textContainer.maximumNumberOfLines = 0;
}
@@ -124,11 +130,11 @@ - (void)blendView:(DoricInputView *)view forPropName:(NSString *)name propValue:
}
} else if ([name isEqualToString:@"onFocusChange"]) {
if ([prop isKindOfClass:[NSString class]]) {
self.onFocusShange = ^(BOOL focused, DoricInputNode *node) {
self.onFocusChange = ^(BOOL focused, DoricInputNode *node) {
[node callJSResponse:prop, @(focused), nil];
};
} else {
self.onFocusShange = nil;
self.onFocusChange = nil;
}
} else if ([name isEqualToString:@"maxLength"]) {
@@ -161,6 +167,9 @@ - (void)blendView:(DoricInputView *)view forPropName:(NSString *)name propValue:
} else if ([name isEqualToString:@"editable"]) {
view.editable = [(NSNumber *) prop boolValue];
} else if ([name isEqualToString:@"returnKeyType"]) {
if (view.textContainer.maximumNumberOfLines == 1) {
return;
}
switch ([(NSNumber *) prop integerValue]) {
case 1:
view.returnKeyType = UIReturnKeyDone;
@@ -182,6 +191,14 @@ - (void)blendView:(DoricInputView *)view forPropName:(NSString *)name propValue:
view.returnKeyType = UIReturnKeyDefault;
break;
}
} else if ([name isEqualToString:@"onSubmitEditing"]) {
if ([prop isKindOfClass:[NSString class]]) {
self.onSubmitEditing = ^(NSString *text, DoricInputNode *node) {
[node callJSResponse:prop, text, nil];
};
} else {
self.onSubmitEditing = nil;
}
} else {
[super blendView:view forPropName:name propValue:prop];
}
@@ -237,15 +254,27 @@ - (void)releaseFocus {
#pragma mark - UITextViewDelegate
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
if (self.onFocusShange) {
self.onFocusShange(YES, self);
if (self.onFocusChange) {
self.onFocusChange(YES, self);
}
return YES;
}
- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
if (self.onFocusShange) {
self.onFocusShange(NO, self);
if (self.onFocusChange) {
self.onFocusChange(NO, self);
}
return YES;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([text isEqualToString:@"\n"]) {
if (textView.textContainer.maximumNumberOfLines == 1) {
if (self.onSubmitEditing) {
self.onSubmitEditing(textView.text, self);
}
return NO;
}
}
return YES;
}