由于Titanium不允许您手动更改文本字段的hintText颜色,因此我必须手动设置hintText。因此,我必须在我正在使用的一个字段上动态更改passwordMask设置。
但是,我的行为很奇怪,我无法判断我是否做错了,或者是否是Titanium中的错误。
所以,这是我的标记:
<TextField id="password" onFocus="passwordFocusEvent" onReturn="passwordReturnEvent" onBlur="passwordBlurEvent" value="password"></TextField>
我的一些控制器代码:
function passwordFocusEvent(e) {
slideViewUp();
if (e.value === 'password') {
e.source.setPasswordMask(true);
e.source.value = '';
}
}
function passwordBlurEvent(e) {
if (!e.value) {
e.source.setPasswordMask(false);
e.source.value = 'password';
}
}
function passwordReturnEvent(e) {
slideViewDown();
passwordBlurEvent(e);
}
发生的事情很奇怪。当我专注于密码字段时,它仍然是纯文本。我输入一些文字,然后点击关闭另一个字段,保持为纯文本。
我点击回密码字段,它仍然是纯文本。
现在这是奇怪的。到目前为止,我只是假设它不起作用。但是,当我第二次点击时,会设置passwordMask。
主要WTF。
我甚至尝试使用$.password.passwordMask = true;
直接定位该字段,但同样如此。
答案 0 :(得分:1)
不幸的是,你不能这样做。小字According to the docs on Ti.UI.TextField;
注意:在iOS上,必须在创建此文本字段时指定passwordMask。
虽然不是全部坏消息,但有几种方法可以解决这个问题,一种方法是通过收听change
事件自行制作密码掩码:
var theStoredPassword = '';
$.password.addEventListener('change', function(e) {
var newpass = e.source.value;
if(newpass.length < theStoredPassword.length) {
// Character deleted from end
theStoredPassword = theStoredPassword.substring(0, theStoredPassword.length-1);
} else {
// Character added to end
theStoredPassword += newpass.substring(newpass.length-1);
}
// Mask the text with unicode ● BLACK CIRCLE, 25CF
$.password.value = new Array(newpass.length + 1).join('●');
});
另一种选择是,只要用户关注密码字段,就会有两个文本字段并将它们交换出来,最上面的一个会有自定义的hinttext,最下面的一个是passwordMasked。事实上,这可能比我刚编写的更容易。 : - )