【发布时间】:2015-12-21 00:16:58
【问题描述】:
我正在为 iOS 开发 PhoneGap 应用程序,我需要摆脱新的 iOS 9 快捷栏。现在我在- (void)viewDidLoad 方法中执行以下操作
if ([self.webView respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [self.webView inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
这隐藏了撤消/重做和复制/粘贴按钮,但快捷键栏仍然显示在键盘上,并且上面有导航按钮。
我怎样才能完全摆脱快捷栏。
感谢您的帮助!
*** 更新 1 ***
我的完整工作代码如下。希望这可以帮助某人(感谢@Clement 回复)
#import <objc/runtime.h>
- (void) hideKeyboardShortcutBar: (UIView *)view
{
for (UIView *sub in view.subviews) {
[self hideKeyboardShortcutBar:sub];
if ([NSStringFromClass([sub class]) isEqualToString:@"UIWebBrowserView"]) {
Method method = class_getInstanceMethod(sub.class, @selector(inputAccessoryView));
IMP newImp = imp_implementationWithBlock(^(id _s) {
if ([sub respondsToSelector:@selector(inputAssistantItem)]) {
UITextInputAssistantItem *inputAssistantItem = [sub inputAssistantItem];
inputAssistantItem.leadingBarButtonGroups = @[];
inputAssistantItem.trailingBarButtonGroups = @[];
}
return nil;
});
method_setImplementation(method, newImp);
}
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self hideKeyboardShortcutBar:self.webView];
}
这个技巧将隐藏撤消/重做和导航按钮。但自动预测文本仍将显示在键盘上。要完全隐藏快捷栏,请将 html 属性添加到您的输入元素
<input autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
P.S 我的应用现在正在审核中。仍然不知道苹果是否会批准这个。
*** 更新 2 ***
我的应用获得了 Apple 的批准
【问题讨论】:
-
你不能,是网络视图的一部分。 Phonegap/Cordova 只是使用 HTML 来构建它的你的 ui,然后它在 web 视图中呈现。
-
感谢您的回复,rckoenes。但是为什么我仍然可以隐藏撤消/复制/粘贴按钮?
-
尽量不要将输入字段放在表单中
-
@jcesarmobile 感谢您的回复。不幸的是,不将输入放在表单中没有帮助。
-
@rubanbs,你把代码放在了哪个类?我试着把它放在 MainViewController.m 中,但它不起作用。断点命中并且代码可以正常执行。但是,do 和 undo 仍然在我的键盘上显示和工作。
标签: ios objective-c cordova uiwebview