在将应用程序移植到移动设备(在iOS上)时,我的视图中有一些事情发生。
请注意,我使用的是JavaFX本机触摸字段,而不是Gluon版本,因为我对于使用TextField的Gluon版本的focusedProperty有问题。它的工作方式是,如果输入无效,它会将字段的值设置为空字符串并打开对话框。
我尝试了以下方法:
答案 0 :(得分:4)
您遇到的问题将发生在JavaFX TextField
和Gluon的问题上,因为后者内部使用内置的JavaFX控件。
在iOS上出现问题的原因是:当JavaFX TextField
获得焦点时,在控件之上添加本机iOS UITextField
,基本上是为了与本机软件进行交互键盘。
您可以看到TextFieldBehavior
在iOS上有specific call:
private void handleFocusChange() {
TextField textField = getControl();
if (textField.isFocused()) {
if (PlatformUtil.isIOS()) {
...
textField.getScene().getWindow().impl_getPeer().requestInput(text, type.ordinal(), w, h,
trans.getMxx(), trans.getMxy(), trans.getMxz(), trans.getMxt(),// + insets.getLeft(),
trans.getMyx(), trans.getMyy(), trans.getMyz(), trans.getMyt(),// + insets.getTop(),
trans.getMzx(), trans.getMzy(), trans.getMzz(), trans.getMzt(), textField.getFont().getSize());
...
}
}
}
直接转到原生implementation:
UITextField* textField = [[UITextField alloc] initWithFrame:CGRectMake(mxt + 1, myt + 1, mxx * (width - 2), myy * (height - 2))];
到目前为止,只要您在原始TextField
可见时不滚动并移动JavaFX UITextField
初始位置,此方法就可以正常工作。
另请注意,具有本机控件的iOS图层位于JavaFX图层之上(这就是您在对话框顶部看到本机编辑器的原因。)
有一个开放的PR支持在软件键盘出现时更新本机控制位置,翻译JavaFX和iOS控件,并引入可用于的updateBounds
method如果滚动事件移动TextField
。
与此同时,您必须添加一些解决方法,以防止在TextField
聚焦时滚动。