2011-03-20 19 views
1

我有一種觀點,即以模態方式顯示來從用戶獲取登錄信息。我具有以下設置:在關閉視圖之前從UITextField中讀取最新值的問題

  • 視圖控制器是一個UITableViewController
  • 該表有三個單元:用戶名和密碼字段(兩個類型UITextFieldUITableViewCell的)和一個簡單的單元作爲登錄按鈕。
  • 值從UITextField中讀取textFieldDidEndEditing:消息
  • 文本字段由不同的標記值標識。

問題

我的問題是,當焦點在一個UITextField和用戶觸摸登錄按鈕,的各自的UITextFieldtextFieldDidEndEditing:消息的didSelectRowAtIndexPath:後發送。現在問題在於,我正在向didSelectRowAtIndexPath:中的LoginViewControllerDelegate發送一條新用戶憑據的消息,此時文本字段的值尚未讀取。

的幾點思考

我有一些想法如何解決這一問題,但我與他們每個人的併發症。

首先,我可以關閉登錄視圖,並在關閉期間通知委託,但我想給委託(擁有此登錄視圖的人)完全控制,我認爲它應該是委託人的工作來關閉成功登錄時的登錄視圖(登錄視圖只讀取憑證,委託人驗證這些憑據)。

其次,我還可以在調用委託之前讀取用戶名或密碼,但是我必須查看文本字段。如果視圖不可見,我認爲假定單元格確實存在是錯誤的。這只是一個很大的,但我不想說得很對。可以保留UITextField嗎?但是,這樣,我不能使用自己提供文本字段的自定義單元格。

基本上我想執行以下操作:檢測針對

(有效)的用戶憑證
  1. 需要,登錄視圖彈起
  2. 用戶輸入用戶名和密碼,並調用完成的。
  3. 委託驗證這些憑據。如果它們不起作用,則顯示一條消息並再次嘗試步驟2。
  4. 憑證沒關係,請關閉登錄視圖並繼續。

回答

1

畢竟,我終於明白,在調用委託之前先辭掉第一個響應者,解決了這個問題。在表視圖控制器我根本就加入電話:

[[self.view findFirstResonder] resignFirstResponder]; 

findFirstResonder是從一個類別,可以發現here

0

試試這個,而不是使用第三個單元格作爲登錄按鈕。在登錄視圖中使用一個簡單的按鈕。在該按鈕的IBAction上,您可以驗證用戶輸入。

+0

好吧,我試過了。看起來按鈕的目標動作仍然在執行'textFieldDidEndEditing:'之前執行,我在其中讀取文本字段的值。 – mkko 2011-03-20 14:31:42

0

您可以使用帶有兩個文本框和一個UIButton的簡單視圖。按下按鈕之後,您可以通過[yourView removeFromSuperview]從超級視圖中刪除視圖。您可以從yourTextfield.text接收數據。

我想這一定要訣竅

+0

我不太明白。我特別想使用表視圖來實現這一點,我不希望疊加層(即彈出的登錄對話框)在委託人這麼說之前被解散。 – mkko 2011-03-24 20:43:19