2010-05-18 51 views
1

所以這是一個有趣的問題。我有自定義tableviewcells,其中包含一個文本字段。當在我的cellForRowAtIndexPath我有一個if語句來確定小區的文本字段是否不應該editable-它看起來像這樣:如何防止我的表格單元格的textview在編輯完成後可編輯?

(self.isEditing) ? [infoCell.textField setEnabled:YES] : [infoCell.textField setEnabled:NO]; 

這實際上工作得很好 - 除了我遇到的問題。它使得當顯示tableview時,行的文本字段不能被編輯。當用戶單擊「編輯」將其置於編輯模式時,則會啓用文本字段進行編輯。

問題:當我編輯字段,然後單擊「完成」,它可以追溯到到正規的tableview,但鍵盤保持可見和最後一個單元格的文本字段我是編輯繼續編輯。

應該發生什麼:鍵盤應該消失,並且所有單元格的文本字段都不應再可編輯。

任何有關可能出錯的想法?需要尋找的東西?

謝謝!

回答

2

不幸的是,禁用UITextField不會關閉鍵盤。你需要保留一個指向你當前UITextField的指針。首先,在你的頭文件中創建一個實例變量:

UITextField *currentTextField; 

然後,實施UITextFieldDelegate協議。骯髒的工作將在下面的方法來完成:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    currentTextField = textField; 
} 

最後,當你準備取消鍵盤和禁用文本框,只需撥打:

[currentTextField resignFirstResponder]; 
[textField1 setEnabled:NO]; 
[textField2 setEnabled:NO]; //ad nauseum 

祝你好運!

+0

這是完美的! – Brad 2010-05-20 15:52:28

1

我發現self.isEditing是不可靠的。如果您正在編輯單個單元格,則它與您處於「編輯模式」時的工作方式不同。

我做了什麼來解決它,只要我想對所有其他單元格做些什麼,我只是遍歷我的表視圖的visibleCells方法並手動調整它們。你必須考慮新單元變得可見時會發生什麼,但這取決於你的實現。

NSArray *visibleCells = [self.tableView visibleCells]; 
for (UITableViewCell *cell in visibleCells) { 
    [cell doSomething]; 
} 

PS - 顯然你可能想通過可見方塊迭代時跳過有問題的單元格。取決於你在做什麼。

+0

感謝您的建議。我玩過它,但我認爲它不會爲此工作。單元格是自定義單元格,它是我需要啓用或禁用的單元格內的文本字段,而不是單元格本身。目前我在cellForRowAtIndexPath中執行此操作,並且在從編輯模式切換到常規模式時,它對於正在編輯的單元格不起作用...非常奇怪。順便說一下,你說得對self.isEditing是不可靠的,我使用我自己的isEditing變量。 – Brad 2010-05-20 14:32:06

相關問題