ios - WKWebView 中的自定义键盘
问题描述
我想控制使用 WKWebView 时显示的键盘。
我有以下启动 webview 的快速代码:
let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
webView.navigationDelegate = self
它将加载如下所示的 html:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="inputElement textFieldInput">
<input type="text" id="textField" value="" data-clear-btn="true"/>
</div>
</body>
</html>
通常,键盘由输入字段上的类型选项控制。“num”表示数字键盘,“text”表示字母数字键盘。但我想拥有更多的控制权。
我已经做了足够的研究,知道这不能通过使用文本框上的选项来完成。我完全期望编写修改打开 webview 的代码。
如何修改快速代码以允许我这样做?
理想情况下,我可以定义多个键盘并允许 html 代码控制它们,如下所示:<input type='customkb1'> and <input type='customkb2'>
我的迫切需要是禁用键盘上的表情符号按钮,但我想要一个通用的解决方案,因为如果我可以定义一个特定于用户输入内容的键盘,我将能够真正提高我的应用程序的可用性。
这是我们迄今为止发现的:这是我知道并用于应用程序本机部分的技巧: https ://stackoverflow.com/a/25861718/1885345
但它不适用于 webViews 这是从 WKWebView 指定键盘的方法: https ://stackoverflow.com/a/28533488/1885345
但它没有设置没有表情符号的键盘这就是我用来禁用第三方键盘的选项: https ://stackoverflow.com/a/34863426/1885345
解决方案
不错的挑战!到目前为止,我已经在 iPad 上对其进行了测试,并通过将输入字段声明pattern
为如下方式使其半工作(有一个警告):
<input type="text" pattern="[0-9]*" value="" data-clear-btn="true"/>
问题是键盘实际上首先弹出数字视图,但它允许通过下ABC
侧按钮切换字母数字(没有表情符号)视图。使用 Javascript,我将输入的值复制到另一个字段,而正则表达式实际上并没有过滤掉输入的字母数字字符。到目前为止,一切都很好。
一旦您将A-Za-z
(作为前缀或后缀)放入模式中,表情符号按钮就会回来。
我试过捕捉UIResponder.keyboardWillShowNotification
但不返回键盘对象,因为我想以编程方式设置它的 UIKeyboardType ,但这个属性显然只反映 UITextViews 。
或者,您可以声明password
类型的输入字段,使用 Javascript 清除点并将实际值显示到另一个不可编辑的字段...
如果我找到更优雅的方式,我会更新我的答案,因为它已经很晚了。干杯。
编辑:显然只使用带有ReactNative的TextInput
元素,您可以直接支持iOS 键盘,这将使我们摆脱 Emojis。keyboardType
ascii-capable
推荐阅读
- javascript - 代码工作正常,但控制台打印在发送到客户端后无法设置标题
- c++ - MPI C++ 收集二维数组
- hibernate - 如果实体列为空,则数据库触发器仅将值设置为列,否则从休眠中的实体字段设置值
- ruby - 无法在 ruby 中加载此类文件错误 - 无法加载此类文件错误
- java - 如何在 Java 中清理拆分的非常大的枚举
- mongodb - 基于 ID(主键)创建关系,无需完整的 JSON 响应
- mapping - 我可以在 Mapster 中启用 Unflatten 作为默认配置设置吗?
- python - 等级系统 discord.py 的排行榜
- reactjs - 将使用 firebase 身份验证的 react js 构建的 google chrome 扩展的所有域列入白名单
- graphics - 我可以通过软件纠正投影仪的错误焦点吗?