如何在UITableViewCells中使用UITextFields?

时间:2011-11-22 00:48:41

标签: iphone objective-c cocoa-touch uitableview uitextfield

我的UITableViewCells中有10 UITableView。每个单元格都有一个UITextField。它们加载正常,但我需要一种方法将每个单元格的文本设置为其关联的字符串。

我是否可以使用UITextField代表来执行此操作,如何确定哪个文本字段属于NSString等?

编辑:

以下是我tableView的照片。我希望它从服务器将文本加载到每个单元格的textfield,然后用户可以编辑它。或者,如果服务器上没有数据,textfield将为空,用户可以添加数据,并且会同步回来。

我为每个单元格创建了NSString,例如temperatureStringpulseString等。

enter image description here

5 个答案:

答案 0 :(得分:0)

创建时,您必须存储对每个文本字段的引用,所以在:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

方法,你可以添加这一行:

[myTextFieldArray addObject: cell.textField];

假设textField是自定义tabel视图单元格的属性。

您还可以在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"];

答案 1 :(得分:0)

编辑:关于新信息,这是我的新解决方案

因此,通过它的外观,您将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的引用,而不是那种方式,当你同步时你只需要从你的每一个{{{ 1}}参考。

但Apple的最佳做法是在处理多个视图时使用唯一标记。这完全取决于你

答案 2 :(得分:0)

UITextfield是UIView的子类,它具有'tag'属性。您可以将单元格的indexPath.row指定为文本字段的标记作为标识。

答案 3 :(得分:0)

根据您对@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;

答案 4 :(得分:0)

您应该在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?