1

由于 Titanium 不允许您手动更改文本字段的提示文本颜色,因此我必须手动设置提示文本。因此,我必须动态更改我正在使用的字段之一上的 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);
}

发生的事情很奇怪。当我专注于密码字段时,它仍然是纯文本。我输入一些文本,然后单击另一个字段,保持纯文本。

我点击回到密码字段,它仍然是纯文本。

现在奇怪的是。到目前为止,我只是假设它不起作用。但是,当我第二次单击关闭时,设置了密码掩码。

主要的WTF。

我什至尝试使用$.password.passwordMask = true;相同的东西直接定位该字段。

4

1 回答 1

1

不幸的是,你不能这样做。根据细则中关于 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('●');
});

另一种选择是有两个文本字段,并在用户关注密码字段时将它们交换出来,顶部的将具有自定义提示文本,底部的将是 passwordMasked。事实上,这可能比我刚刚编写的代码要容易得多。:-)

于 2013-09-10T12:59:09.407 回答