[英]Get text from UITextField on a TableViewCell
我有一個UITableViewController,原型單元包含UITextFields。 為了配置這些定制單元,我創建了一個UITableViewCell子類。 我已經通過一個出口(nonatomic, weak)
將textField選擇到單元的子類中。
在這個子類上,我創建了一個協議,UITableViewController是該協議的委托,因此每當這些textField中的內容發生變化時,TableViewController都會知道它。 基本上我希望這可以將值保存在NSUserDefaults上
此外,為了從這些textField中動態獲取值,我可以執行以下操作:
((TextFieldCell*)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]]).textField.text
大多數時候都可以。 但是,當textField由於已滾動而在視圖之外時,從textField.text獲得的值是(null)。 一旦再次進入視圖,一切都會恢復正常。
我試圖將出口從弱變強,但無濟於事。
我想我可以在類上定義一些私有的NSString,並在調用委托協議時將其填寫。 問題是我想讓我的代碼盡可能通用,同時使對私有變量的需求盡可能少,主要是為了簡化單元格生成代碼。
當文本字段不在視圖中時,還有其他方法可以獲取它們嗎?
提前致謝!
但是您知道UITableView僅保留可見矩形的單元格嗎? 當一個單元格離開屏幕,並且另一個單元格需要一個新的單元格才能進入可見區域時,舊的單元格將重新用於新內容。
因此,表視圖的每一行都沒有一個單元格。 而且,如果您的表包含大量數據,則行數要比單元格多得多。
正如Thyraz所說,UITableView僅保留可見rect的單元格-並具有合理的緩沖區以允許滾動。 這就是為什么“重用標識符”如此重要的原因,它們指示哪些單元可用於哪些表(當您要擔心多個表時,這很關鍵)。 不幸的是,這本身並不能回答您的問題。
存儲這些textViews內容的責任不在UITableView的肩上。 通過數據源委托協議提供數據是您的工作,因此,您應該在數據源中查詢該信息。
編輯:這意味着,您應該將此數據存儲在其他位置,通常以包含表視圖的視圖控制器類上的屬性形式存儲。 我建議你使用的NSArray為目的,但你也可以做到這一點通過類型的字典,甚至在不得已的(這在理論上是多了,你可以做到這一點,但它是一個非常糟糕的想法之類的話) ,一系列屬性。 就我個人而言,我幾乎總是使用NSArrays,因為它們的結構適合於該問題,但是從理論上講,您可以采用其他方式。 (我只使用了一次基於dict的結構,那是我的數據嵌套在遞歸結構中的情況)
UITableViewController不會使單元格離開屏幕。 您可以使用以下模式來獲得先前使用的模式,以進行內存管理優化,但是您必須假設每次進入屏幕(即使出隊)時都需要重置單元格的值,因為無法保證值將是。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier1 = @"Cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
if( cell == nil ) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier1] autorelease];
cell2.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell2.editingAccessoryType = UITableViewCellAccessoryNone;
}
switch( indexPath.section ) {
case first_Section:
if( row == 0 ) {
cell1.textLabel.text = @"Some Text";
cell1.accessoryView = [self myCustomViewControl];
cell = cell1;
}
... etc
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.