// // KeyboardViewController.m // CustomKeyboard // // Created by Mac on 2025/10/27. // #import "KeyboardViewController.h" #import "KBToolBar.h" #import "KBKeyboardView.h" #import "KBKey.h" static CGFloat KEYBOARDHEIGHT = 256; @interface KeyboardViewController () @property (nonatomic, strong) UIButton *nextKeyboardButton; // 系统“下一个键盘”按钮(可选) @property (nonatomic, strong) KBToolBar *topBar; @property (nonatomic, strong) KBKeyboardView *keyboardView; @end @implementation KeyboardViewController - (void)updateViewConstraints { [super updateViewConstraints]; // 可在此添加自定义尺寸约束 } - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; } - (void)setupUI { // 固定键盘整体高度 [self.view.heightAnchor constraintEqualToConstant:KEYBOARDHEIGHT].active = YES; // 顶部栏 self.topBar = [[KBToolBar alloc] init]; self.topBar.delegate = self; [self.view addSubview:self.topBar]; [self.topBar mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view); make.top.equalTo(self.view.mas_top).offset(6); make.height.mas_equalTo(40); }]; // 键盘区域 self.keyboardView = [[KBKeyboardView alloc] init]; self.keyboardView.delegate = self; [self.view addSubview:self.keyboardView]; [self.keyboardView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view); make.top.equalTo(self.topBar.mas_bottom).offset(4); make.bottom.equalTo(self.view.mas_bottom).offset(-4); }]; } #pragma mark - KBToolBarDelegate - (void)toolBar:(KBToolBar *)toolBar didTapActionAtIndex:(NSInteger)index { // 可根据业务透传或处理。示例:插入占位标记 [A1]..[A4] // NSString *placeholder = [NSString stringWithFormat:@"[A%ld]", (long)index+1]; } - (void)toolBarDidTapSettings:(KBToolBar *)toolBar { // 这里示例仅插入一个标记。 [self.textDocumentProxy insertText:@"[settings]"]; } #pragma mark - KBKeyboardViewDelegate - (void)keyboardView:(KBKeyboardView *)keyboard didTapKey:(KBKey *)key { switch (key.type) { case KBKeyTypeCharacter: [self.textDocumentProxy insertText:key.output ?: key.title ?: @""]; break; case KBKeyTypeBackspace: [self.textDocumentProxy deleteBackward]; break; case KBKeyTypeSpace: [self.textDocumentProxy insertText:@" "]; break; case KBKeyTypeReturn: [self.textDocumentProxy insertText:@"\n"]; break; case KBKeyTypeModeChange: { // 切换 字母 <-> 数字 布局 keyboard.layoutStyle = (keyboard.layoutStyle == KBKeyboardLayoutStyleLetters) ? KBKeyboardLayoutStyleNumbers : KBKeyboardLayoutStyleLetters; [keyboard reloadKeys]; } break; case KBKeyTypeGlobe: [self advanceToNextInputMode]; break; case KBKeyTypeCustom: // 自定义占位:切换语言或其它操作 [self.textDocumentProxy insertText:@"[lang]"]; break; case KBKeyTypeShift: // Shift 已在 KBKeyboardView 内部处理 break; } } @end