2010-07-19 8 views

risposta

9

Supponendo Bobby B ha ragione nel senso che è impossibile cambiare il personaggio segreto,
la presente presente,
senza guarantuee alcun tipo e con tutte le avvertenze applicabili,
dal momento che questo è un orribile kludgeche sarà sicuramente vi darà mal di testa ad un certo punto,
sperando di non essere downvoted troppo per questo:

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

impostare il proprio delegato UITextField s' alla classe che contiene questa funzione.

Basta assicurarsi di avere self.backing che è un numero trattenuto NSString*. La copia & incolla kludge era necessaria per preservare la posizione del cursore.

Non so nulla di incollare, questa è stata una supposizione sfrenata e funziona, ma è necessario scoprire se questo può portare a qualche problema in tal senso. Ho provato un po 'e non sembra dare alcun problema.

+0

È molto probabile che non riesca per la correzione automatica e determinati tastiere internazionali (in particolare, l'auto-correzione non sembra chiamare textField: shouldChangeCharactersInRange :). –

+2

Penso che la correzione automatica per l'immissione sicura sia comunque una cattiva idea ;-) e penso che chiami 'shouldChangeCharactersInRange', IIRC da un progetto con input limitato in pixel. – mvds

+0

grazie. È consigliato cambiare i personaggi? è questo che viola le linee guida per l'interfaccia utente di iPhone? – thndrkiss

0

Non penso che ciò sia possibile, e sto basandomi su una mancanza di documentazione trovata nei documenti per UITextInputTraits (in particolare per secureTextEntry).

Potrebbe essere sbagliato però - interessato a sapere se qualcuno ha fatto prima.

Buona fortuna!

7

Si potrebbe anche solo cambiare il tipo di carattere ...

Se si modifica il carattere unicode 'proiettile' (U + 2022) è possibile personalizzare il personaggio segreto. Ci sono un sacco di editor di font gratuiti. Io uso questo http://www.cr8software.net/typex.html

Per aggiungere font personalizzati al progetto, controlla - this link

E 'abbastanza facile

Allora non c'è bisogno di codificare qualsiasi cosa semplicemente funziona.

0

Semplicemente, consentire la proprietà Secure in IB o tramite programma.

Problemi correlati