[英]How to work with UITextFields inside of UITableViewCells?
我的UITableViewCells
中有10個UITableView
。 每個單元都有一個UITextField
。 它們加載正常,但是我需要一種將每個單元格的文本設置為其關聯的字符串的方法。
是否可以使用UITextField
的委托來執行此操作,如何確定哪個文本字段屬於NSString
等?
編輯:
這是我的tableView
的圖片。 我希望它從服務器將文本加載到每個單元格的文本textfield
,然后用戶可以對其進行編輯。 或者,如果服務器上沒有數據,則textfield
將為空白,並且用戶可以添加數據並將其同步回去。
我為每個單元格創建了一個NSString
,例如temperatureString
, pulseString
等。
創建每個文本字段時,必須存儲對它們的引用,因此在:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
方法,您將添加以下行:
[myTextFieldArray addObject: cell.textField];
假設textField是自定義表格視圖單元格的屬性。
您還可以在if(cell == nil)方法之后在文本字段中設置文本。
委托方法僅使您知道何時鍵入文本等。
編輯:
考慮到您添加的內容,我同意Sid和CStreel。 為每個值創建標簽:
#define kTemperatureTag 0
#define kPulseTag 1
// etc.
作為CStreel的替代方法,我將分配/檢索與indexPath行匹配的信息,而不必擔心分配標簽,因為如果將標簽從零開始,它們將是同一件事。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// setup / retrieve cell
NSInteger index = [indexPath row];
switch(index)
{
case kTemperatureTag:
cell.textField.text = [self.childAppointmentDictionary objectForKey:@"temperature"];
break;
// case ...
}
// ..
}
和:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSInteger index = [indexPath row];
switch(index){
case kTemperatureTag:
[self.childAppointmentDictionary addObject:cell.textField.text forKey:@"temperature"];
編輯:關於新信息,這是我的新解決方案
因此,從外觀上來說,您是在每個單元格中插入UITextField
,而不是設置每個單元格的標簽,而是為每個UITextField
設置標簽
首先定義您的標簽
#define DESCRIPTIVE_TAG_VALUE_1 10
#define DESCRIPTIVE_TAG_VALUE_2 11
#define DESCRIPTIVE_TAG_VALUE_3 12
...
如果要與每個更新同步,則在UITextField
委托中使用這些來確定哪個UITextField
屬於哪個NSString
。 然后獲得對UITableView
的引用,並檢索具有與您的定義之一相同的標簽的單元格的每個子視圖的每個文本值(同樣在switch語句中)。
再次使用iOS使用標簽時,他們是您的朋友
您還說過,您要持有對每個NSString
的引用,而可以僅持有對每個UITextField
的引用,這樣,在同步時,您只需從每個UITextField
引用中解脫即可。
但是,Apple的最佳做法是在處理多重視圖時要使用唯一標簽。 真的取決於你
UITextfield是UIView的子類,它具有'tag'屬性。 您可以將單元格的indexPath.row分配為其文本字段的標記作為標識。
根據您對@Javy的評論(其中包含您應考慮添加到原始問題中的其他信息),您可以執行以下操作:
UITableViewCell *cell = nil;
NSString *key = nil;
switch (indexPath.row)
{
case 0:
cell = self.temperatureCell;
key = @"temperature";
break;
case 1:
// Do other cases similarly ...
}
NSString *text = [self.childAppointmentDictionary objectForKey:key];
cell.textField.text = text;
您應該在tableView: cellForRowAtIndexPath:
設置文本tableView: cellForRowAtIndexPath:
聽起來您有一個特定的順序要您的項目出現,這將是使用NSArray而不是NSDictionary的好時機。
您可以在init或initwithNibName中創建保留的數組屬性:
self.myListArray = [NSArray arrayWithObjects:@"fever", @"cough", @"runny nose", nil];
然后,假設您只有1個部分,則可以執行cell.textField.text = [self.myListArray objectAtIndex:indexPath.row];
您是否有理由為此使用NSDictionary而非NSArray?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.