Skip to content

Commit 42b0f40

Browse files
authored
Merge pull request #1 from Arise-cn/add_returnKeyType
modify returnKeyType
2 parents 88321bf + 0b85dd1 commit 42b0f40

File tree

6 files changed

+41
-12
lines changed

6 files changed

+41
-12
lines changed

android/src/main/java/com/variabletextinput/VariableTextInputViewManager.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -289,28 +289,22 @@ public void setOnSelectionChange(final VariableTextInput view, boolean onSelecti
289289
public void setKeyboardType(VariableTextInput view, String keyboardType) {
290290
switch (keyboardType) {
291291
case "default": {
292-
view.setImeOptions(EditorInfo.IME_ACTION_NONE);
293292
view.setInputType(EditorInfo.TYPE_CLASS_TEXT);
294293
}
295294
break;
296295
case "numeric":
297-
view.setImeOptions(EditorInfo.IME_ACTION_NONE);
298296
view.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
299297
break;
300298
case "email-address":
301-
view.setImeOptions(EditorInfo.IME_ACTION_NONE);
302299
view.setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
303300
break;
304301
case "phone-pad":
305-
view.setImeOptions(EditorInfo.IME_ACTION_NONE);
306302
view.setInputType(EditorInfo.TYPE_CLASS_PHONE);
307303
break;
308304
case "url":
309-
view.setImeOptions(EditorInfo.IME_ACTION_NONE);
310305
view.setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_URI);
311306
break;
312307
default:
313-
view.setImeOptions(EditorInfo.IME_ACTION_NONE);
314308
view.setInputType(EditorInfo.TYPE_CLASS_TEXT);
315309
break;
316310
}
@@ -382,6 +376,7 @@ public Map<String, Object> getConstants() {
382376
"onAndroidBlur",
383377
MapBuilder.of("registrationName", "onAndroidBlur")).put(
384378
"onAndroidFocus",
385-
MapBuilder.of("registrationName", "onAndroidFocus")).build();
379+
MapBuilder.of("registrationName", "onAndroidFocus")).put("onAndroidSubmitEditing",
380+
MapBuilder.of("registrationName", "onAndroidSubmitEditing")).build();
386381
}
387382
}

android/src/main/java/com/variabletextinput/view/VariableTextInput.java

+15
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,18 @@ public void onPaste() {
245245
new TextView.OnEditorActionListener() {
246246
@Override
247247
public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) {
248+
Log.d("Input", "onEditorAction actionId:" + actionId);
249+
if (actionId == EditorInfo.IME_ACTION_SEARCH
250+
|| actionId == EditorInfo.IME_ACTION_SEND
251+
|| actionId == EditorInfo.IME_ACTION_DONE) {
252+
WritableMap event = Arguments.createMap();
253+
event.putString("text", editText.getText().toString());
254+
final Context context = getContext();
255+
if (context instanceof ReactContext) {
256+
((ReactContext) context).getJSModule(RCTEventEmitter.class).receiveEvent(getId(), "onAndroidSubmitEditing", event);
257+
}
258+
return true;
259+
}
248260
if ((actionId & EditorInfo.IME_MASK_ACTION) != 0 || actionId == EditorInfo.IME_NULL) {
249261
boolean isMultiline = true;
250262

@@ -588,12 +600,15 @@ private void updateImeOptions() {
588600
returnKeyFlag = EditorInfo.IME_ACTION_PREVIOUS;
589601
break;
590602
case "search":
603+
editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
591604
returnKeyFlag = EditorInfo.IME_ACTION_SEARCH;
592605
break;
593606
case "send":
607+
editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
594608
returnKeyFlag = EditorInfo.IME_ACTION_SEND;
595609
break;
596610
case "done":
611+
editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
597612
returnKeyFlag = EditorInfo.IME_ACTION_DONE;
598613
break;
599614
}

ios/VariableTextInput.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
4444
@property(assign, nonatomic, getter=isSupport) BOOL bSupport;
4545
@property(nonatomic, copy) RCTBubblingEventBlock onChange;
4646
@property (nonatomic, copy, nullable) RCTDirectEventBlock onContentSizeChange;
47-
@property(nonatomic, copy) RCTBubblingEventBlock onSubmitEditing;
47+
@property(nonatomic, copy, nullable) RCTDirectEventBlock onSubmitEditing;
4848
@property(nonatomic,copy, nullable)RCTDirectEventBlock onTag;
4949
@property(nonatomic, copy, nullable) RCTDirectEventBlock onTextInput;
5050
@property(nonatomic, copy, nullable) RCTDirectEventBlock onBlur;

ios/VariableTextInput.m

+8-1
Original file line numberDiff line numberDiff line change
@@ -347,13 +347,20 @@ - (void)textViewDidChangeSelection:(UITextView *)textView {
347347
}
348348

349349
- (void)textViewDidChange:(UITextView *)textView {
350-
351350
if (_onChange) {
352351
_onChange(@{@"text":[textView.textStorage getPlainString]});
353352
}
354353
}
355354

356355
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
356+
// 处理键盘return事件
357+
BOOL returnStatus = textView.returnKeyType == UIReturnKeyDone || textView.returnKeyType == UIReturnKeySend || textView.returnKeyType == UIReturnKeySearch;
358+
if(returnStatus && [text isEqualToString:@"\n"]) {
359+
if (self.onSubmitEditing) {
360+
self.onSubmitEditing(@{@"text": [self.textStorage getPlainString]});
361+
}
362+
return NO;
363+
}
357364
NSString *oldStr = [self getStrContentInRange:NSMakeRange(0, [self.attributedText length])];
358365
NSString *newStr = [NSString stringWithFormat:@"%@%@",oldStr,text];
359366
[self handleTags:text];

ios/VariableTextInputViewManager.m

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ @implementation VariableTextInputViewManager
3535
RCT_EXPORT_VIEW_PROPERTY(onFocus, RCTBubblingEventBlock)
3636
RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
3737
RCT_EXPORT_VIEW_PROPERTY(onContentSizeChange, RCTBubblingEventBlock)
38+
RCT_EXPORT_VIEW_PROPERTY(onSubmitEditing, RCTBubblingEventBlock)
3839
RCT_CUSTOM_VIEW_PROPERTY(textAlign, NSTextAlignment, VariableTextInput)
3940
{
4041
[view setTextAlignment:[RCTConvert NSTextAlignment:json]];

src/VariableTextInputView.tsx

+14-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
TextInputContentSizeChangeEventData,
1212
Platform,
1313
KeyboardTypeOptions,
14+
ReturnKeyTypeOptions,
1415
} from 'react-native';
1516
import React, {
1617
forwardRef,
@@ -53,13 +54,14 @@ interface INativeProps {
5354
e: NativeSyntheticEvent<TextInputContentSizeChangeEventData>
5455
) => void;
5556
keyboardType?: KeyboardTypeOptions | undefined;
56-
onSubmitEditing?: (text: string) => void;
57-
onAndroidSubmitEditing?: (text: string) => void;
57+
onSubmitEditing?: (e: NativeSyntheticEvent<TextInputChangeEventData>) => void;
58+
onAndroidSubmitEditing?: (e: IVTTextInputData) => void;
5859
submitBehavior?: 'submit';
5960
onBlur?: () => void;
6061
onFocus?: () => void;
6162
onAndroidFocus?: () => void;
6263
onAndroidBlur?: () => void;
64+
returnKeyType?: ReturnKeyTypeOptions | undefined;
6365
}
6466
interface IProps {
6567
style?: StyleProp<TextStyle> | undefined;
@@ -84,6 +86,7 @@ interface IProps {
8486
onMention?: (data: IonMentionData) => void;
8587
onBlur?: () => void;
8688
onFocus?: () => void;
89+
returnKeyType?: ReturnKeyTypeOptions | undefined;
8790
}
8891
export type IATTextViewRef = React.ForwardedRef<IATTextViewBase>;
8992

@@ -236,7 +239,14 @@ const VariableTextInputView = forwardRef(
236239
insertMentionAndDelateKeyword: insertMentionAndDelateKeyword,
237240
};
238241
});
239-
const onAndroidSubmitEditing = () => {};
242+
const _onSubmitEditing = (
243+
e: NativeSyntheticEvent<TextInputChangeEventData>
244+
) => {
245+
props.onSubmitEditing && props.onSubmitEditing(e.nativeEvent.text);
246+
};
247+
const onAndroidSubmitEditing = (e: IVTTextInputData) => {
248+
props.onSubmitEditing && props.onSubmitEditing(e.nativeEvent.text);
249+
};
240250
const onAndroidTextInput = (e: IVTTextInputData) => {
241251
props.onTextInput && props.onTextInput(e);
242252
};
@@ -249,6 +259,7 @@ const VariableTextInputView = forwardRef(
249259
onAndroidChange={_onChange}
250260
onAndroidContentSizeChange={onContentSizeChange}
251261
{...props}
262+
onSubmitEditing={_onSubmitEditing}
252263
onAndroidSubmitEditing={onAndroidSubmitEditing}
253264
onAndroidTextInput={onAndroidTextInput}
254265
onAndroidBlur={props.onBlur}

0 commit comments

Comments
 (0)