[英]How to handle references to UITextFields in dynamic UITableView (iPhone)
我有一個UITableView
,它被分解為用戶定義的sections
。 在每個sections
有2 rows
。 這兩rows
中的每一rows
包含一個用戶可以編輯的UITextField
。
我需要的是一種能夠在以后訪問這些UITextFields
中的數據的方法。 我希望這會是一個簡單的問題,但它會給我帶來很大的悲傷。
到目前為止,我嘗試了兩種方法:
嘗試1
我創建了兩個NSMutableArrays
,其中我將UITextField
對象添加到索引i(對應於它來自的section
)。 然后我嘗試通過遍歷數組來訪問這些值。 這不起作用,因為UITextFields
一直被擦干凈。 每次我向下滾動表格, UITextField
都不在視野范圍內,當我回去時,它的內容已被擦干凈。
嘗試2
我試圖掌握UITableView
的sections
數量(這很好)。 然后我想通過每個迭代section
中的UITableView
,在記錄值rows
各。 這是我失去的地方,因為我不知道該怎么做或者甚至可能。
如果這是一個天真的問題,我很抱歉,但是我真的很掙扎,並且會感激任何建議。
請記住,文本字段在滾動時會被重用,因此您並不真正想要存儲對它們的引用。
您所做的是在輸入信息時捕獲信息。 最簡單的方法是在委托中實現textFieldDidEndEditing
協議方法。
棘手的部分是弄清楚文本字段在哪一行。最好的方法是創建一個具有NSIndexPath
屬性的UITableViewCell
子類。 然后,您可以在使用tableview:willDisplayCell:forRowAtIndexPath:
配置單元格時設置tableview:willDisplayCell:forRowAtIndexPath:
.
然后,在textFieldDidEndEditing中,通過其superview訪問tableViewCell indexPath屬性。 即:
NSIndexPath indexPathOfParentCell = [(MyUITableViewCellSubclass *)self.superview indexPath];
這樣做可以讓您知道單元格的節和行。
像這樣在Table的cellForRow中創建TextField並給它一個標記
UITextField * userField = [[[UITextField alloc] initWithFrame:CGRectMake(0, 12, self.view.frame.size.width -20, 20)] autorelease];
userField.tag = 1001;
userField.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14];
userField.textAlignment = UITextAlignmentCenter;
userField.delegate = self;
userField.autocorrectionType = UITextAutocorrectionTypeNo;
userField.autocapitalizationType = UITextAutocapitalizationTypeNone;
userField.clearButtonMode = UITextFieldViewModeWhileEditing;
if (indexPath.row == 0)
[cell.contentView addSubview:userField];
然后像這樣訪問TextField:
UITextField *userField = (UITextField *)[[(UITableViewCell *)[(UITableView *)tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] contentView] viewWithTag:1001];
如果將文本字段的文本保留在數組中而不是文本字段本身,則“嘗試1”應該可以正常工作。 (任何試圖查看或控制數據對象的東西很有可能出錯。)
無論作為表視圖的數據源,如果內容單獨存儲,應該能夠根據節和行重新填充滾動的單元格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.