views:

185

answers:

2

Hi,

Is it possible to change the secure password character displayed ?

A: 

I don't think that this is possible, and I'm basing that on a lack of documentation found in the docs for UITextInputTraits (specifically for secureTextEntry).

Could be wrong though - interested to hear if someone has done this before.

Good luck!

Bobby B
+2  A: 

Assuming Bobby B is right in that it is impossible to change the secret character,
I hereby present,
with no guarantuee whatsoever and with all warnings that are applicable,
since this is a horrible kludge which will certainly give you headaches at some point,
hoping not to be downvoted too much for it:

/* 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 */

Set your UITextField's delegate to the class containing this function.

Just make sure you have self.backing which is a retained NSString*. The copy&paste kludge was needed to preserve cursor position.

I don't know anything about pasting, this was a wild guess and it works, but you do need to find out if this may lead to some problem in that respect. I tested a little and it didn't seem to give any problem.

mvds
It is very likely to fail for autocorrection and certain international keyboards (in particular, auto-correction doesn't seem to call textField:shouldChangeCharactersInRange:).
tc.
I think autocorrection for secure entry is a bad idea anyway ;-) and I think it does call `shouldChangeCharactersInRange`, IIRC from a project with pixel-width limited input.
mvds
thanks. Is that advised to change the characters ? is that violating the iphone UI guidelines ?
thndrkiss
I don't think this violates anything; there is no private framework/api you're breaking into, and the user experience is 99% that of a normal secure entry. Things may look different if you were to replace it with another *text*, rather than a single char ;-) The outline of such an approach would normally be used to limit input to certain chars, or a certain format.
mvds