2015-02-10 60 views
1

我在iOS 8上構建應用程序。我有一個登錄屏幕,用戶輸入用戶名和密碼。當他們輸入了一個有效的用戶名和密碼時,他們被允許移動到下一個屏幕(一個按鈕被啓用,允許他們前進)。UITextField secureEntry不尊重clearsOnBeginEditing屬性

我有邏輯寫,告訴時啓用或禁用自身的按鈕,這是基於關閉UITextFieldDelegate方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

這個方法告訴我,當我的文本字段要改變自己文字 - 很簡單。我已將密碼文本字段的secureTextEntry屬性設置爲YES,並將其clearsOnBeginEditing屬性設置爲NO。

當我離開密碼文本框然後回到它(通過單擊它內部)並鍵入內容時,文本仍然被擦除。使事情變得更加複雜,shouldChangeCharactersInRange:replacementString:方法不會給我任何指示文本字段被清除(基於範圍或替換字符串)。因此,我無法檢測何時將繼續按鈕設置爲禁用。

有什麼想法?謝謝!

回答

1

好的,我發現了一個不同的設計解決方案的問題,我會自己回答。我最終什麼事做的是消除與改變按鈕狀態的任何邏輯從shouldChangeCharactersInRange:replacementString:

(啓用VS禁用)我不是讓我的班UITextFieldTextDidChangeNotification觀察員,然後在我傳遞時的方法進行我的按鈕狀態變化通知觸發。這裏是什麼,訂閱/退訂該通知是這樣的:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:nil]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
    [[NSNotificationCenter defaultCenter]removeObserver:self]; 
} 

然後我就可以計算出在我的方法是這樣改變什麼文本字段:

- (void)textFieldDidChange:(NSNotification*)notification 
{ 
    UITextField *textField = (UITextField*)[notification object]; 
    //perform logic here, change button state, etc. 
} 

我承認,這可能不是這個問題是最好的(或唯一的)解決方案,但它確實能解決最初的問題。乾杯!

0

您可以使用textFieldShouldClear方法作爲UITextFieldDelegate的一部分來確定是否應該禁用繼續按鈕。

此外,您可以在此方法中返回NO,以防止在明確設置其屬性不起作用時允許清除該字段。但是,您可能需要檢查標記或以其他方式防止在用戶名字段中禁用清除。

編輯: 看到這裏列出的答案:https://stackoverflow.com/a/7305603/2845237

注:這將無法正常工作如果secureTextEntry = YES。默認情況下,無論清零,開始編輯是或否,iOS默認情況下都會在編輯之前清除安全條目文本字段的文本。

+0

感謝您的回答。然而,這對我不起作用。即使在實現了textFieldShouldClear之後,該方法在字段清除時也不會被調用。 – 2015-02-10 21:26:29

+1

從apple文檔(關於textFieldShouldClear):「文本字段響應用戶按下內置清除按鈕來調用此方法(該按鈕默認不顯示,但可通過更改clearButtonMode屬性中的值來啓用)「由於我沒有使用清除按鈕,所以爲什麼不調用這個委託方法是有意義的。 – 2015-02-10 21:31:58

+0

我會說,閱讀該鏈接中的答案會稍微清除一些情況。基本上,從用戶體驗的角度來看,安全的輸入文本字段總是會在編輯時清除,因爲用戶幾乎不可能知道該字段以前是什麼東西,因爲它無論如何都變成了黑色圓圈。既然如此,我想我們需要嘗試一些不同的東西來阻止文本字段的清除。因此,爲什麼我認爲我的解決方案是體面的。 – 2015-02-11 21:53:37

相關問題