我按代码构建自定义键盘。在self.inputView上,添加一些按钮以输入自定义内容。核心代码如下:
[self.wordsSenders enumerateObjectsUsingBlock:^(UIButton * _Nonnull cell, NSUInteger idx, BOOL * _Nonnull stop) {
[self.inputView addSubview:cell];
}];
所有按钮都可以准确显示。在iOS 10中,inputViewController可以响应按钮的动作来输入单词。但在iOS 8.2或iOS 9.3中,按下按钮将导致崩溃,因为无法识别的选择器发送到0xXXXX。 MeanWhile,对象,接收按钮的动作,是不同的。 inputViewController的inputWord:
不是触发器!
- (void)inputWord:(UIButton *)sender {
if ([sender.titleLabel.text isEqualToString:@"字"]) {
_showSpecialWords = !_showSpecialWords;
for (int i = 20; i < 28; i ++) {
if (_showSpecialWords) {
[self.wordsSenders[i] setTitle:self.specialWords[i - 20] forState:UIControlStateNormal];
} else {
[self.wordsSenders[i] setTitle:self.normalWords[i] forState:UIControlStateNormal];
}
}
} else {
[self.textDocumentProxy deleteBackward];
[self.textDocumentProxy insertText:sender.titleLabel.text];
}
}
用于按钮绑定操作:
[cell addTarget:self action:@selector(inputWord:) forControlEvents:UIControlEventTouchUpInside];
有任何帮助吗?谢谢!
答案 0 :(得分:0)
哦,对不起,这是我的错!我应该维护一个关于UIInputViewController
的实例变量,而不是构建一个局部变量。在iOS 10中,它可以正常工作可能是因为系统自动维护UIInputViewController
实例而iOS 8或iOS 9没有。就像这样:
CGRect viewFrame = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame) - CGRectGetMaxY(_finishButton.frame) - minusHeight);
_carPlateViewController = [[EPCarPlateViewController alloc] initWithKeyboardType:type hiddenType:hiddenType];
_carPlateViewController.delegate = self;
UIView *inputView = _carPlateViewController.inputView;
inputView.frame = viewFrame;
textField.inputView = inputView;