forked from Bunlong/react-native-custom-keyboard-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRNCustomKeyboardKit.m
101 lines (73 loc) · 3.28 KB
/
RNCustomKeyboardKit.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#import <React/RCTRootView.h>
#import "RNCustomKeyboardKit.h"
#import "RCTBridge+Private.h"
#import "RCTUIManager.h"
#import <React/RCTSinglelineTextInputView.h>
@implementation RNCustomKeyboardKit
@synthesize bridge = _bridge;
- (dispatch_queue_t)methodQueue
{
return dispatch_get_main_queue();
}
RCT_EXPORT_MODULE(CustomKeyboardKit)
RCT_EXPORT_METHOD(install:(nonnull NSNumber *)reactTag withType:(nonnull NSString *)keyboardType)
{
UIView* inputView = [[RCTRootView alloc] initWithBridge:_bridge
moduleName:@"CustomKeyboardKit"
initialProperties:@{ @"tag": reactTag, @"type": keyboardType }];
RCTSinglelineTextInputView *view = (RCTSinglelineTextInputView*)[_bridge.uiManager viewForReactTag:reactTag];
[view.backedTextInputView setInputAccessoryView:inputView];
[view reloadInputViews];
}
RCT_EXPORT_METHOD(uninstall:(nonnull NSNumber *)reactTag)
{
UITextView *view = (UITextView*)[_bridge.uiManager viewForReactTag:reactTag];
view.inputView = nil;
[view reloadInputViews];
}
RCT_EXPORT_METHOD(insertText:(nonnull NSNumber *)reactTag withText:(NSString*)text) {
UITextView *view = (UITextView*)[_bridge.uiManager viewForReactTag:reactTag];
[view replaceRange:view.selectedTextRange withText:text];
}
RCT_EXPORT_METHOD(backSpace:(nonnull NSNumber *)reactTag) {
UITextView *view = (UITextView*)[_bridge.uiManager viewForReactTag:reactTag];
UITextRange* range = view.selectedTextRange;
if ([view comparePosition:range.start toPosition:range.end] == 0) {
range = [view textRangeFromPosition:[view positionFromPosition:range.start offset:-1] toPosition:range.start];
}
[view replaceRange:range withText:@""];
}
RCT_EXPORT_METHOD(doDelete:(nonnull NSNumber *)reactTag) {
UITextView *view = (UITextView*)[_bridge.uiManager viewForReactTag:reactTag];
UITextRange* range = view.selectedTextRange;
if ([view comparePosition:range.start toPosition:range.end] == 0) {
range = [view textRangeFromPosition:range.start toPosition:[view positionFromPosition: range.start offset: 1]];
}
[view replaceRange:range withText:@""];
}
RCT_EXPORT_METHOD(moveLeft:(nonnull NSNumber *)reactTag) {
UITextView *view = (UITextView*)[_bridge.uiManager viewForReactTag:reactTag];
UITextRange* range = view.selectedTextRange;
UITextPosition* position = range.start;
if ([view comparePosition:range.start toPosition:range.end] == 0) {
position = [view positionFromPosition:position offset:-1];
}
view.selectedTextRange = [view textRangeFromPosition: position toPosition:position];
}
RCT_EXPORT_METHOD(moveRight:(nonnull NSNumber *)reactTag) {
UITextView *view = (UITextView*)[_bridge.uiManager viewForReactTag:reactTag];
UITextRange* range = view.selectedTextRange;
UITextPosition* position = range.end;
if ([view comparePosition:range.start toPosition:range.end] == 0) {
position = [view positionFromPosition: position offset: 1];
}
view.selectedTextRange = [view textRangeFromPosition: position toPosition:position];
}
RCT_EXPORT_METHOD(switchSystemKeyboard:(nonnull NSNumber*) reactTag) {
UITextView *view = [_bridge.uiManager viewForReactTag:reactTag];
UIView* inputView = view.inputView;
view.inputView = nil;
[view reloadInputViews];
view.inputView = inputView;
}
@end