17

以下を使用することで、UITextfieldをパスワードモードで動作させることが可能であることを私は知っています。

textfield.secureTextEntry = YES;

これにより、ユーザーが入力したすべての文字が「*」に変更されます。ただし、最後に入力した文字が約0.5秒間点滅します。これが標準的な動作であることを理解しています。

これを止めて、入力された文字を完全に隠しておく方法はありますか?

これを達成するために、Imはサブクラス化UITextFieldしてからオーバーライドすることを考えていますdrawTextInRect:rect

しかし、私は他の提案を歓迎します。

4

1 に答える 1

3

あなたはこれを行うことができます:

  • UITextFieldをシークレットではなく通常として設定します。
  • イベントを聞くUITextFieldTextDidChangeNotification
  • その場合は、テキストフィールドの文字を「*」に置き換えて、実際のパスワードをプロパティに保存してください。

このコードは機能しますが、ちょっと醜いですが、おそらく最適化することができます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextFieldTextDidChangeNotification object: nil];
}

- (void) keyPressed: (NSNotification *) notification {
    if(!self.password)
        self.password = @"";

    NSString* fieldText = [notification.object valueForKey:@"text"];
    NSString* lastChar = [fieldText substringFromIndex:fieldText.length-1];

    if(self.password.length>fieldText.length)
        self.password = [self.password substringToIndex:self.password.length-1];
    else
        self.password = [NSString stringWithFormat:@"%@%@", self.password, lastChar];

    NSString* secret = @"";
    for (int l = 0; l<self.password.length; l++) {
        secret = [secret stringByAppendingString:@"*"];
    }
    self.textField.text = secret;
}
于 2013-10-09T07:29:18.807 に答える