【问题标题】:change the secure password character in UITextfield更改 UITextfield 中的安全密码字符
【发布时间】:2011-03-17 20:12:40
【问题描述】:

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

【问题讨论】:

标签: iphone iphone-sdk-3.0 uitextfield


【解决方案1】:

假设 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 的委托设置为包含此函数的类。

只要确保你有self.backing,它是一个保留的NSString*。需要复制和粘贴工具来保留光标位置。

我对粘贴一无所知,这是一个疯狂的猜测,但它确实有效,但您需要确定这是否会导致这方面的一些问题。我测试了一下,似乎没有任何问题。

【讨论】:

  • 自动更正和某些国际键盘很可能会失败(特别是自动更正似乎不会调用 textField:shouldChangeCharactersInRange:)。
  • 我认为安全输入的自动更正无论如何都是一个坏主意;-) 我认为它确实从像素宽度有限输入的项目中调用 shouldChangeCharactersInRange, IIRC。
  • 谢谢。是否建议更改字符?这是否违反了 iphone UI 指南?
  • 我不认为这违反了什么;没有您要侵入的私有框架/api,用户体验是正常安全入口的 99%。如果您将其替换为另一个 text,而不是单个字符,情况可能会有所不同;-) 这种方法的概要通常用于将输入限制为某些字符或某种格式.
  • 这很完美,但是,我建议任何人使用它来删除 NSLog() 调用。这些日志在设备日志中是可追踪的,因此如果用户输入他的密码,它可能会在设备日志中找到。
【解决方案2】:

你也可以改变字体...

如果您更改 Unicode 字符“BULLET”(U+2022),您可以自定义密码字符。 那里有很多免费的字体编辑器。 我用这个http://www.cr8software.net/typex.html

要为您的项目添加自定义字体,请查看 - this link

很简单

那么你就不必编写任何代码了。

【讨论】:

    【解决方案3】:

    我认为这是不可能的,并且我认为这是因为 UITextInputTraits(特别是 secureTextEntry)的文档中缺少文档。

    但可能是错的 - 有兴趣了解是否有人以前做过。

    祝你好运!

    【讨论】:

      【解决方案4】:

      简单地说,允许在 IB 中或通过程序保护财产。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-19
        • 1970-01-01
        • 2017-01-17
        • 2023-02-16
        • 2014-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多