TextEditBox无法获取输入值及页面导航代码正确性排查
页面导航代码正确性分析
从MainScene打开ProfileSelectionScreen的代码
这段逻辑是正确的:创建ProfileSelectionScreen节点后,将其添加到当前场景并设置焦点,符合Roku组件导航的基本流程。
从ProfileSelectionScreen打开CreateProfileScreen的代码
核心逻辑可行,但存在潜在风险:
- 隐藏当前组件(
m.top.visible = false)的处理没问题,但未将其从场景树移除,这可能导致旧组件内的元素继续拦截输入事件。 - 获取场景的降级逻辑(先尝试自身
getScene(),再通过父节点获取)是稳妥的,避免场景引用失效。 - 创建并添加新组件、设置焦点的流程正确,日志输出也便于排查组件是否成功创建。
TextEditBox无法获取输入的排查方向
隐藏组件抢占焦点
你仅将ProfileSelectionScreen设为不可见,但它仍在场景树中。如果该组件内包含TextEditBox,即使视觉上不可见,系统仍可能将输入事件路由给它。建议改为从场景树移除旧组件:' 替换 m.top.visible = false 为以下代码 scene.removeChild(m.top)若后续需要返回该页面,可提前保存组件引用,或重新创建。
TextEditBox自身配置缺失
检查目标TextEditBox的关键属性:- 确认
focusable=true:只有开启该属性,节点才能获取输入焦点 - 确认
editable=true:该属性控制节点是否允许输入内容
- 确认
Group组件的焦点传递问题
由于CreateProfileScreen继承自Group,需确保:- Group自身设置
focusable=true,或配置focusPolicy="childFirst",确保焦点能传递到内部的TextEditBox节点 - 内部TextEditBox的
focusable属性未被父节点的配置覆盖
- Group自身设置
场景层级与焦点优先级
确保CreateProfileScreen处于场景树的最顶层,避免被其他组件拦截输入。添加后可调用bringToFront()强制提升层级:scene.appendChild(form) form.bringToFront() form.setFocus(true)验证当前焦点节点
通过日志打印当前获取焦点的节点,确认是否为目标TextEditBox:? "当前焦点节点: " + m.top.getScene().getFocusedNode().getName()若输出为旧组件内的节点,即可确认焦点被抢占。
内容的提问来源于stack exchange,提问作者Raxit Pandya
相关产品推荐
相关产品推荐

