2017-05-08 1 views
0

Neuling in Obj-C hier. Ich habe 6 Textfelder, die aus Benutzer PIN-Nummer besteheniOS Obj-C toggeln sichere Texteingabe für mehrere Textfelder

Wie kann ich die sichere Texteingabe dieser 6 UI TextFields wechseln? Es gibt Button, um die PIN-Nummer anzuzeigen und zu entschlüsseln. Standardmäßig ist die sichere Texteingabe im Storyboard aktiviert.

Nach einer Weile googeln, fand ich diesen Code aus, dass alle Textfelder in meiner Ansicht finden soll

- (NSArray*) findAllTextFieldsInView:(UIView*)view { 
    NSMutableArray* textfieldarray = [[NSMutableArray alloc] init]; 
    for (id x in [view subviews]) { 
     if ([x isKindOfClass:[UITextField class]]) 
      [textfieldarray addObject:x]; 

     if ([x respondsToSelector:@selector(subviews)]) { 
      [textfieldarray addObjectsFromArray:[self findAllTextFieldsInView:x]]; 
     } 
    } 
    return textfieldarray; 
} 

und dies ist mein Code

- (IBAction) revealPIN:(id)sender { 

    if (self.reveal == TRUE) { 
     self.reveal = FALSE; 
    } 
    else { 
     self.reveal = TRUE; 
    } 

    NSArray* allTextFields = [self findAllTextFieldsInView:[self view]]; 
} 

Ich weiß nicht, wo die textField.secureTextEntry = YES oder NO setzen;

Ich legte den Boolean, so dass ich den Toggle-Status überprüfen kann. Was muss ich danach machen? Oder gibt es andere, elegantere Wege, dies zu erreichen? Ich bin verwirrt, wie man das tut

Danke!

+0

Sind alle Ihre TextFields über StoryBoard hinzugefügt? –

+0

Haben Sie Storyboard oder Xib verwendet? – vivek

+0

Ich verwende Storyboard, um die Textfelder zu entwerfen. Ich habe auch schon die Tags 1 - 6 für jedes Textfeld eingegeben. Zuerst überprüfe ich die sichere Texteingabe, dann möchte ich, dass der Benutzer sie umschalten kann. – Alvin

Antwort

1

Sie sollte so versuchen:

- (IBAction) revealPIN:(id)sender { 

    if (self.reveal == TRUE) { 
     self.reveal = FALSE; 
    } 
    else { 
     self.reveal = TRUE; 
    } 

    NSArray* allTextFields = [self findAllTextFieldsInView:[self view]]; 

    for tf in allTextFields 
    { 
     tf.secureTextEntry = self.reveal; // <--- Check this one 
    } 
} 

Sie können auch zuerst die Textfelder zu, anstatt entweder zu finden optimieren dann ihre secureTextEntry Eigenschaft aktualisieren, sollten Sie eine Methode erstellen, die das Textfeld einer Eigenschaft direkt aktualisieren wie folgt:

- (void) updateSecureEntryAttrForAllTextFieldsInView:(UIView*)view { 
    NSMutableArray* textfieldarray = [[NSMutableArray alloc] init]; 
    for (id x in [view subviews]) { 
     if ([x isKindOfClass:[UITextField class]]) 
      x.secureTextEntry = self.reveal; // <--- Check this one 

     if ([x respondsToSelector:@selector(subviews)]) { 
      [textfieldarray addObjectsFromArray:[self updateSecureEntryAttrForAllTextFieldsInView:x]]; 
     } 
    } 
    return; 
} 
+0

Dies ist, was ich suche! Sir, du bist mein Tagesretter! – Alvin

1

Wenn Sie textFiled über Storyboard oder Xib hinzugefügt haben, können Sie diese Option im Interface Builder finden. Wählen Sie Ihr Textfeld im Storyboard. Hier habe ich ein Referenzbild beigefügt.

enter image description here

Bitte Häkchen Sichere Option für alle Ihre Textfelder.

Wenn Benutzer auf "Reveal" tippen, ändern Sie die Option "textfield secure" an der folgenden Stelle in Ihrem Code.

-(NSArray*)findAllTextFieldsInView:(UIView*)view{ 
NSMutableArray* textfieldarray = [[NSMutableArray alloc] init]; 
for(id x in [view subviews]){ 
    if([x isKindOfClass:[UITextField class]]){ 
x. secureTextEntry = YES; 
     [textfieldarray addObject:x]; 
} 
    if([x respondsToSelector:@selector(subviews)]){ 
     [textfieldarray addObjectsFromArray:[self findAllTextFieldsInView:x]]; 
    } 
} 
return textfieldarray; 
} 
+0

Sir, ich möchte den Benutzer dazu in der Lage sein Schalten Sie die sichere Texteingabe um. Es gibt die Schaltfläche "Reveal", um die PIN-Nummer anzuzeigen – Alvin

+0

Wählen Sie diese Option für alle Textdateien. Wenn Benutzer dann auf "Reveal" tippen, ändern Sie textFiled.secure = NO für diesen bestimmten Text. – vivek

+0

das versuche ich zu erreichen. Deshalb frage ich hier, Sir, wie kann ich alle Textfelder bekommen und dann die sichere Texteingabe umschalten – Alvin

0

Wenn Sie den Benutzer ermöglichen, sichere Eingabe zum Anzeigen/Verbergen, haben Sie diesen Code in Ihre Toggle-Methode zu verwenden:

yourTextField.secureTextEntry = YES; 
yourTextField.secureTextEntry = NO; 
+2

Sir, Sie lesen meine Frage nicht gründlich – Alvin

0

Da Sie Storyboard verwenden, ich das tun würde, folgend:

  1. Im Storyboard müssen Sie eine Szene (einen Ansichtscontroller) haben, dessen Ansicht die 6 Textfelder als Unteransichten enthält.
  2. Stellen Sie sicher, dass die Klasse des Ansichtscontrollers auf den Namen Ihrer Unterklasse UIViewController festgelegt ist, indem Sie zum Identity Inspector gehen. Angenommen, Ihre Klasse heißt MyViewController.
  3. Da Sie Objective-C verwenden, gehen Sie zu MyViewController.m Da Sie eine Steckdose zu jedem Ihrer Textfelder benötigen, die alle vom selben Typ sind, verwenden Sie am besten IBOutletCollection. So fügen Sie die folgende Klassenerweiterung zu MyViewController.m:

    @interface MyViewController() 
    @property (nonatomic) IBOutletCollection(UITextFIeld) NSArray *textFields; 
    @end 
    
  4. Fügen Sie jede Steckdose in die Sammlung durch den Assistenten-Editor, setzen das Storyboard auf der linken Seite des Bildschirms und MyViewController.m auf der rechten Seite. Steuer ziehen von jedem UITextField in Storyboard zu der textFields Eigenschaft in MyViewController.m.

  5. Fügen Sie die folgende Methode zur Umsetzung von MyViewController.m:

    @implementation MyViewController 
    - (void)updateTextFieldsWithSecureEntry:(BOOL)secureEntryEnabled { 
        for (UITextField *textField in self.textFields) { 
         textField.secureTextEntry = secureEntryEnabled 
        } 
    } 
    @end 
    
  6. Sie einfach [self updateTextFieldsWithSecureEntry: false] sichere Eingabe drehen rufen kann auf allen 6 Textfelder aus.

Verwandte Themen