2011-11-29 28 views
2

我正在用標識符「TextCell」在故事板中構建自定義單元格。這是一個平面單元格,但是通過代碼我將每個單元格添加到一個文本字段,因爲我可以有一個「n」個單元格,以便用戶可以在每個單元格中插入文本。我的問題是,我創建的文本框似乎是在一個又一個地重複創建自己。我可以這樣說,因爲我有一個佔位符文本,它變得越來越黑暗。如何刷新iOS 5中的可重用單元格?

我也使用ARC。請任何你能提供給我的見解都能幫助我很多。

我附上我在哪裏添加文本框到細胞功能的代碼:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TextCell"]; 


//create text field inside cell and init it with the default settings 
UITextField * textHolder = [[UITextField alloc] initWithFrame:CGRectMake(18, 10, 300, 44)]; 
[textHolder setPlaceholder:[cellsText objectAtIndex:indexPath.row]]; 
//[textHolder setValue:[UIColor blackColor] forKeyPath:@"_placeholderLabel.textColor"]; 
[textHolder setFont:[UIFont fontWithName:@"HelveticaNeue-Regular" size:16]]; 
[textHolder setTextColor:[UIColor blackColor]]; 
[textHolder setTextAlignment:UITextAlignmentLeft]; 
textHolder.tag = FIELD_PREFIX + indexPath.row; 
[textHolder setDelegate:self]; 

[[NSBundle mainBundle] loadNibNamed:@"accessoryView" owner:self options:nil]; 
[textHolder setInputAccessoryView:accessoryView]; 
[cell addSubview:textHolder];  

//set keyboard to type passwords  
[textHolder setSecureTextEntry:YES];  

回答

3

每次細胞得到重用你再添UITextField到已有的一套文本字段。您有兩種選擇:

1)將文本字段放在storyboard中的custon table view單元格中,而不是手動創建它。通過使用UITableViewCell的自定義子類,您可以將您的文本字段分配給您的自定義子類中的屬性。這有額外的好處,你可以添加一堆其他的東西到單元格。然後您可以訪問該屬性而不是創建新的文本字段。

2)在創建一個新的文本字段之前刪除「舊的」文本字段。您可能必須搜索UITextField實例的所有子視圖才能實現此目的,因爲您已將標記值用於其他內容。

第一個絕對是更清潔的版本。

+0

你好,非常感謝你的幫助。 –

+0

我想第一個選項,它看起來很不錯,但它創造了一些麻煩,因爲有故事板中的文本字段意味着它有一個靜態標籤,所以我無法獲得當前單元格的標籤的textfied當第一次響應者(這有助於我用鍵盤滾動)。 **第二**選擇它會更適合我,但因爲我使用ARC,所以我不清楚我如何刪除「舊」文本字段。如果你能幫助我,這將意味着很多。感謝您的所有幫助。 –

+0

1:只要您使用「UITableViewCell」的自定義子類,就應該能夠將文本字段鏈接到「IBOutlet」。當您將該類設置爲表格視圖單元格的類時,您應該可以執行命令 - 將文本字段拖到.h文件以創建該屬性,不需要標籤。然後你可以通過你的子類的屬性來處理所有事情。 2:你需要通過子視圖找到'UITextField',並從超級視圖('removeFromSuperview')中刪除它。如果您沒有進一步參考文本字段,應該自動解除分配。 –

1

你不應該添加文本框的觀點,你應該將它們添加到內容視圖:

[cell.contentView addSubview:textHolder]; 

希望它能幫助。

+0

嘿謝謝!!!這是問題的一部分,但它並沒有完全解決它,我有點小事,我有一些問題正確地宣佈單元格。 @NullSleep –

相關問題