更改UITextfield中安全密码字符

8

是否可以更改显示的安全密码字符?


请查看此链接:http://stackoverflow.com/questions/24531274/how-do-i-stop-uitextfield-secure-text-showing-characters/29944670#29944670。 - the1pawan
4个回答

9

假设Bobby B说无法更改秘密字符,
我在此呈现,
没有任何保证和适用的所有警告,
因为这是一个可怕的补丁,肯定会在某些时候给你带来头痛,
希望不会被太多人点踩:

/* don't ever use this PROOF OF CONCEPT CODE for production use */
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    if ( self.backing == nil ) self.backing = @"";
    static BOOL pasting = false;

    if ( !pasting )
    {       
        self.backing = [self.backing stringByReplacingCharactersInRange:range withString:string];
        NSLog(@"backing: %@",self.backing);
        if ( [string length] == 0 ) return YES; // early bail out when just deleting chars

        NSString *sec = @"";
        for ( int i=0;i<[string length]; i++ ) sec = [sec stringByAppendingFormat:@"■"];

        pasting = true;
        [[UIPasteboard generalPasteboard] setString:sec];
        [textField paste:self];

        return NO;  
    } else {
        pasting = false;
        return YES; 
    }       
}   
/* you have been warned */

将您的UITextField的委托设置为包含此函数的类。
只需确保您有一个保留的NSString*,即self.backing。复制和粘贴的方法是为了保留光标位置。
我不知道关于粘贴的任何事情,这只是一个猜测,但它可以工作,但您需要找出是否会在这方面导致问题。我进行了一些测试,似乎没有任何问题。

很可能会因自动更正和某些国际键盘而失败(特别是自动更正似乎不调用textField:shouldChangeCharactersInRange:)。 - tc.
2
我认为安全输入的自动更正功能本来就是个坏主意;-) 而且我记得在一个像素宽度有限制的输入项目中,它确实会调用 shouldChangeCharactersInRange 函数。 - mvds
谢谢。更改字符是建议的吗?这是否违反了iPhone用户界面准则? - thndrkiss
1
我认为这并不违反任何规定;你没有侵入任何私有框架/接口,用户体验也99%与正常安全输入相同。如果您将其替换为另一个文本而不是单个字符,情况可能会有所不同;-) 这种方法的概要通常用于限制输入为某些字符或特定格式。 - mvds
这个很完美,但我建议使用它的人删除NSLog()调用。这些日志可以在设备日志中被追踪,所以如果用户输入密码,它可能会在设备日志中被发现。 - Kevin

8
您也可以更改字体...
如果更改Unicode字符'BULLET'(U+2022),则可以自定义秘密字符。有很多免费的字体编辑器可用。我使用这个http://www.cr8software.net/typex.html 要将自定义字体添加到您的项目中,请查看-此链接 这很容易
然后您就不必编写任何代码,它只是起作用。

0

我认为这是不可能的,我基于在UITextInputTraits文档中找不到secureTextEntry相关内容的依据。

但如果我错了,我很想知道有没有人做过这件事。

祝你好运!


-2

简单地说,可以通过IB或程序允许Secure属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接