UIWebView中的iOS文本输入字段在ARKit SceneKit中用作SCN材料,它不会显示键盘或成为第一响应者
我在SceneKit中的平面上创建了一个web视图,如下所示:UIWebView中的iOS文本输入字段在ARKit SceneKit中用作SCN材料,它不会显示键盘或成为第一响应者,ios,swift,uiwebview,scenekit,uikeyboard,Ios,Swift,Uiwebview,Scenekit,Uikeyboard,我在SceneKit中的平面上创建了一个web视图,如下所示: self.webView = ARWebView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) self.material_webPlane.diffuse.contents = self.webView let geom_webPlane = SCNPlane(width: 0.2, height: 0.2) geom_webPlane.materials = [mater
self.webView = ARWebView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
self.material_webPlane.diffuse.contents = self.webView
let geom_webPlane = SCNPlane(width: 0.2, height: 0.2)
geom_webPlane.materials = [material_webPlane]
ARWebView是UIWebView的一个子类,只是为了覆盖canBecomeFirstResponder方法(试图解决问题但没有结果):
在用户触摸到web视图中的文本输入字段(例如google.com上的搜索栏)之前,一切正常。web视图有效地集中在搜索栏上,输入光标出现在搜索栏中,但屏幕上没有能够输入文本的键盘
我还运行了以下循环来检查窗口层次结构
for window: UIWindow in UIApplication.shared.windows {
print("isKeyWindow:\(window.isKeyWindow) windowLevel:\(window.windowLevel) frame:\(NSStringFromCGRect(window.frame)) class:\(type(of: window).description())")
}
这将产生以下结果:
isKeyWindow:true windowLevel:0.0 frame:{{0, 0}, {1366, 1024}} class:UIWindow
isKeyWindow:false windowLevel:0.0 frame:{{0, 0}, {1366, 1024}} class:UIWindow
isKeyWindow:false windowLevel:10.0 frame:{{0, 0}, {1366, 1024}} class:UITextEffectsWindow
isKeyWindow:false windowLevel:10000.0 frame:{{0, 0}, {500, 500}} class:_SCNSnapshotWindow
这一切都在ARSCNView中,它本质上是一个SCNScene,在实际的iPhone/iPad设备iOS11上有一个实时摄像头。我更关心的是webview接收输入,而不是实际看到键盘视图(即即使用户必须使用无线键盘)
请问,是否有人知道如何让webview开始接收输入/如何让键盘正确显示?我做错了什么
更新1:
看起来UIWebView只是简单地拒绝成为第一个响应者。更深入地看,当UIWebView在更正常的设置中成为第一个响应者时,实际上是私有子视图UIWebBrowserView成为第一个响应者:
UIWebView
> UIScrollView
> UIWebBrowserView
也就是说,如果没有可能的应用程序拒绝,就不会有人碰它
更新2:
到目前为止,我的结论是,我的UIWebView是_SCNSnapshotWindow的后代,在我看来,它就像苹果将视图层次渲染到scenekit几何体上的方法。它可能必须以任意窗口的形式预先组成这个层次结构;单击_scnsnapshot窗口,然后将其映射到几何体上。结果是,_scnsnapshot窗口似乎不能成为关键窗口,这意味着它不能在响应程序链中运行
现在怎么办?为我的UIWebView实现自定义UIScrollView?贝勒?嘿,伙计,这太有趣了。你认为你可以分享你的ARWebview课程吗?我很想玩玩它。
UIWebView
> UIScrollView
> UIWebBrowserView