在文本字段之间更改焦点时保持键盘打开
Keep keyboard open on focus change between text fields
在我用 Appcelerator Titanium 为 iOS 和 Android 开发的应用程序中,我有一些文本字段,当用户单击 return 按钮时,我想在这些文本字段之间导航。
在 Android 上,这是通过接下来设置 return 键类型自动处理的。对于 iOS,我必须添加事件侦听器,以便在单击 return 按钮时触发对下一个字段的关注。
但是,当焦点发生切换时,键盘会向下移动然后再次向上移动。显示行为的代码示例:
var win = Ti.UI.createWindow({width: Ti.UI.FILL,height: Ti.UI.FILL,backgroundColor:'white'});
var input1 = Ti.UI.createTextField({
width: 50, height:20, top: 50, hintText: 'input1',
returnKeyType: Ti.UI.RETURNKEY_NEXT
});
input1.addEventListener("return",function(){input2.focus();});
win.add(input1);
var input2 = Ti.UI.createTextField({
width: 50, height:20, top: 100, hintText: 'input2',
returnKeyType: Ti.UI.RETURNKEY_NEXT
});
input2.addEventListener("return",function(){input1.focus();});
win.add(input2);
win.open();
根据之前给出的答案(后来删除),可以在原版中保持键盘打开 iOS。那么 - 有没有办法使用这种技术在 Appcelerator 中将文本字段焦点切换到 iOS 期间保持键盘打开?谢谢!
您可以只使用 returnKeyType :Titanium.UI.RETURNKEY_NEXT
属性 作为您的 TextField
在查看 iOS 的 Titanium 资源之前,我在这上面花了几个小时(我真的不会说 Obj.C)。最后我了解到我所知道的 属性 的表现与我的预期完全相反。您需要做的就是将 suppressReturn
设置为 false
。
我还将为在 return 上前进到下一个字段的表单提供我的可移植代码:
景色
<View id='signupForm' class='formContainer'>
<TextField id='emailField' name='email' class='loginField emailField' hintText='email' onReturn='selectNextField' onFocus='scrollToField' />
<View class="hrLine"></View>
<TextField id='passwordField' name='password' class='loginField' hintText='password' passwordMask='true' onReturn='selectNextField' onFocus='scrollToField' />
<View class="hrLine"></View>
<TextField id='fnameField' class='loginField' name='fname' hintText='first name' onReturn='selectNextField' onFocus='scrollToField' autocapitalization='Ti.UI.TEXT_AUTOCAPITALIZATION_WORDS'/>
<View class="hrLine"></View>
<TextField id='lnameField' class='loginField' name='lname' hintText='last name' returnKeyType='Ti.UI.RETURNKEY_GO' onReturn='submitSignup' onFocus='scrollToField' autocapitalization='Ti.UI.TEXT_AUTOCAPITALIZATION_WORDS'/>
</View>
风格
'.loginField': {
height: 40,
width: '100%',
opacity: 1,
paddingLeft: 10,
returnKeyType: Ti.UI.RETURNKEY_NEXT,
// THE CRITICAL LINE
suppressReturn: false
}
控制器
// controller.js
function selectNextField(e) {
var hint = e.source.getHintText(),
nextOne = false,
finished = false;
// find currently focused field then declare that the next field is THE ONE
_.each($.signupForm.getChildren(), function(view) {
if(finished) {
return;
}
if(view.getHintText && view.getHintText() === hint) {
nextOne = true;
return;
}
if(nextOne && view.getApiName() === 'Ti.UI.TextField') {
finished = true;
return view.focus();
}
});
}
在我用 Appcelerator Titanium 为 iOS 和 Android 开发的应用程序中,我有一些文本字段,当用户单击 return 按钮时,我想在这些文本字段之间导航。
在 Android 上,这是通过接下来设置 return 键类型自动处理的。对于 iOS,我必须添加事件侦听器,以便在单击 return 按钮时触发对下一个字段的关注。
但是,当焦点发生切换时,键盘会向下移动然后再次向上移动。显示行为的代码示例:
var win = Ti.UI.createWindow({width: Ti.UI.FILL,height: Ti.UI.FILL,backgroundColor:'white'});
var input1 = Ti.UI.createTextField({
width: 50, height:20, top: 50, hintText: 'input1',
returnKeyType: Ti.UI.RETURNKEY_NEXT
});
input1.addEventListener("return",function(){input2.focus();});
win.add(input1);
var input2 = Ti.UI.createTextField({
width: 50, height:20, top: 100, hintText: 'input2',
returnKeyType: Ti.UI.RETURNKEY_NEXT
});
input2.addEventListener("return",function(){input1.focus();});
win.add(input2);
win.open();
根据之前给出的答案(后来删除),可以在原版中保持键盘打开 iOS。那么 - 有没有办法使用这种技术在 Appcelerator 中将文本字段焦点切换到 iOS 期间保持键盘打开?谢谢!
您可以只使用 returnKeyType :Titanium.UI.RETURNKEY_NEXT
属性 作为您的 TextField
在查看 iOS 的 Titanium 资源之前,我在这上面花了几个小时(我真的不会说 Obj.C)。最后我了解到我所知道的 属性 的表现与我的预期完全相反。您需要做的就是将 suppressReturn
设置为 false
。
我还将为在 return 上前进到下一个字段的表单提供我的可移植代码:
景色
<View id='signupForm' class='formContainer'>
<TextField id='emailField' name='email' class='loginField emailField' hintText='email' onReturn='selectNextField' onFocus='scrollToField' />
<View class="hrLine"></View>
<TextField id='passwordField' name='password' class='loginField' hintText='password' passwordMask='true' onReturn='selectNextField' onFocus='scrollToField' />
<View class="hrLine"></View>
<TextField id='fnameField' class='loginField' name='fname' hintText='first name' onReturn='selectNextField' onFocus='scrollToField' autocapitalization='Ti.UI.TEXT_AUTOCAPITALIZATION_WORDS'/>
<View class="hrLine"></View>
<TextField id='lnameField' class='loginField' name='lname' hintText='last name' returnKeyType='Ti.UI.RETURNKEY_GO' onReturn='submitSignup' onFocus='scrollToField' autocapitalization='Ti.UI.TEXT_AUTOCAPITALIZATION_WORDS'/>
</View>
风格
'.loginField': {
height: 40,
width: '100%',
opacity: 1,
paddingLeft: 10,
returnKeyType: Ti.UI.RETURNKEY_NEXT,
// THE CRITICAL LINE
suppressReturn: false
}
控制器
// controller.js
function selectNextField(e) {
var hint = e.source.getHintText(),
nextOne = false,
finished = false;
// find currently focused field then declare that the next field is THE ONE
_.each($.signupForm.getChildren(), function(view) {
if(finished) {
return;
}
if(view.getHintText && view.getHintText() === hint) {
nextOne = true;
return;
}
if(nextOne && view.getApiName() === 'Ti.UI.TextField') {
finished = true;
return view.focus();
}
});
}