如果需要开发第三方键盘 首先得了解一下苹果官方文档 https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html
然后建议看一下 APPExtension
http://www.cocoachina.com/ios/20140918/9677.html
键盘应用属于你的hostAPP 所以你要了解appGroups来做到两个应用间信息传输
使用方法
NSUserDefaults *keyboarddefaults = [[NSUserDefaults alloc] initWithSuiteName:appGroups];
appGroups是我们设置的字段 与添加appGroup的字段一致
xcode会给我们生成keyboard的类 在这个类 我们可以做第三方键盘
1.这个类中建议用autolayout做约束
CGFloat _expandedHeight = 256;
NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant: _expandedHeight];
[self.view addConstraint: _heightConstraint];
该方法可以设置键盘高度
我遇到的问题:在updateContraint 中调用无效
3.输入文字:调用协议方法 textDocumentProxy.
- (BOOL)hasText;
- (void)insertText:(NSString *)text; //输入文字
- (void)deleteBackward;//删除文字
我们的键盘如果要通过审核 就必须要有一个下一个输入法的按钮 参照原生的那个地球按钮
- (void)advanceToNextInputMode
这个方法就可以完成
apple开放的API较少 自己看文档是个很好的选择
4 还遇到一个问题:暂时无法做到从自己的键盘端跳转到mainApp
以前使用webview是可以做到 但是apple更新之后禁用这个方法 stackOverflow上的建议也无效
希望有解决这个问题的人可以告诉我
网友评论
mainApp字段是提前设置好的URL Types
UIResponder *responder = self;
while (responder) {
if ([responder isKindOfClass:[UIApplication class]]) {
NSLog(@"yes:%@", responder);
break;
}
responder = [responder nextResponder];
NSLog(@"responder:%@", responder);
}
NSString* toUtf8= [@"mainApp://" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:toUtf8];
[responder performSelector:@selector(openURL:) withObject:url];
// [(UIApplication *)responder canOpenURL:url];
NSLog(@"--------%@",url);
[[self extensionContext] openURL:url completionHandler:^(BOOL success) {
NSLog(@"Success? %i", success);
}];
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController clear:]: unrecognized selector sent to instance 0x10020c010'