2017-05-08 17 views
0

Obj-C這裏的新手。我有6個文本字段,包含用戶的PIN號碼iOS Obj-C爲多個文本字段切換安全文本輸入

如何切換這6個UI文本字段的安全文本輸入項?有按鈕可以顯示和不顯示PIN碼。默認情況下,在Storyboard上檢查安全文本條目。

GOOGLE了一段時間之後,我發現這個代碼,目的是找到我的觀點中的所有文本字段

- (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; 
} 

,這是我的代碼

- (IBAction) revealPIN:(id)sender { 

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

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

我不知道在哪裏把textField.secureTextEntry = YESNO;

我把布爾值,以便我可以檢查切換狀態。在此之後我必須做些什麼?或者還有其他更優雅的方式來實現它?我很困惑如何做到這一點

謝謝!

+0

是否通過StoryBoard添加了所有的textField? –

+0

你用過storyboard或xib嗎? – vivek

+0

我正在使用故事板來設計文本字段。我也已經爲每個文本字段放置了標籤1 - 6。首先我檢查安全文本輸入,然後我希望用戶能夠在加載視圖時切換它 – Alvin

回答

1

你應該嘗試這樣的:

- (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 
    } 
} 

您還可以進行優化,而不是要麼找到文本框的第一則更新secureTextEntry財產,應創建一個直接更新文本字段的財產的方法像這樣:

- (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

這就是我正在尋找!先生,你是我節省的一天! – Alvin

1

如果您通過storyboard或xib添加了textFiled,則可以在界面構建器中找到此選項。在故事板中選擇你的文本框。這裏我附上了參考圖片。

enter image description here

請對號爲您所有的文本框的安全選項。

當用戶點擊「顯示」時,在代碼的下方位置更改文本框安全選項。

-(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

先生,我希望用戶能夠切換安全文本條目。有按鈕「顯示」顯示PIN號碼 – Alvin

+0

爲所有文本文件選擇此選項。 然後,當用戶點擊「顯示」更改設置textFiled.secure =否爲特定的文本文件。 – vivek

+0

這就是我想要實現的。這就是爲什麼我在這裏問這裏先生,我怎麼能得到所有的文本字段,然後切換安全的文本輸入 – Alvin

0

如果你想使用戶能夠顯示/隱藏安全項,你必須使用此代碼在您的切換方法:

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

先生,你沒有完全閱讀我的問題 – Alvin

0

由於您使用的故事板,我會做以下:

  1. 在故事板,你必須有一個場景(視圖控制器),其視圖包含6個文本字段作爲子視圖。
  2. 通過轉到Identity Inspector,確保將視圖控制器的類設置爲UIViewController子類的名稱。假設你的類叫做MyViewController。
  3. 由於您使用Objective-C,請轉至MyViewController.m由於您需要每個文本字段的插口,這些字段都是相同類型,所以最好使用IBOutletCollection。所以下面的類擴展添加到MyViewController.m

    @interface MyViewController() 
    @property (nonatomic) IBOutletCollection(UITextFIeld) NSArray *textFields; 
    @end 
    
  4. 通過助理編輯,把故事板在屏幕右邊的左邊和MyViewController.m添加每個出口集合。控制從故事板中的每個UITextField拖動到MyViewController.m中的textFields屬性。

  5. 添加以下方法給MyViewController.m實現:

    @implementation MyViewController 
    - (void)updateTextFieldsWithSecureEntry:(BOOL)secureEntryEnabled { 
        for (UITextField *textField in self.textFields) { 
         textField.secureTextEntry = secureEntryEnabled 
        } 
    } 
    @end 
    
  6. 你可以簡單地調用[self updateTextFieldsWithSecureEntry: false]把安全入口關所有6個文本字段。