0

In my application I am creating UITextField within UITableViewCell so that user can fill some information. This is my code:

if (![cell.contentView viewWithTag:10])
{
    UITextField *textField=[[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 30)];
    [textField setTag:10];
    [textField setBorderStyle:UITextBorderStyleRoundedRect];
    [textField setBackgroundColor:[UIColor redColor]];
    [cell.contentView addSubview:textField];  
}

I am doing this so that I create that UITextField only once for each cell so that the textFields don't overlap... but a problem happened for example when the user writes in the textfields:

row 0 -> 0
row 1 -> 1
row 2 -> 2
row 3 -> 3
row 4 -> 4 

And so on, if you have number of rows more than 10 and you started to scroll I can notice that the cells exchange there indices randomly so i can get something like:

row 0 -> 3
row 1 -> 1
row 2 -> 2
row 3 -> 0
row 4 -> 4

in the UITextField.text how to make something or a trick like fixed position for each cell?

4

2 回答 2

0

这是我如何在我的一个视图控制器中执行此操作的简短示例:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell
        = [tableView dequeueReusableCellWithIdentifier:AttributeCellIdentifier];
    NSString *propertyName = @"...";
    NSString *className = @"...";
    UILabel *label = (UILabel*)[cell.contentView viewWithTag:1];

    UITextField* textField = (UITextField*)[cell.contentView viewWithTag:2];

    textField.text = [self stringForAttribute:propertyName];
    label.text = propertyName;

    return cell;
}

tableView:cellForRowAtIndexPath:UITableViewDataSource协议的一部分。每当表格视图需要将新单元格滚动到视图中时,它就会被调用。由于它是回收自动滚出视图的单元格,因此您需要根据模型中的值重置此方法中单元格的状态。

您可能还会发现知道您可以在您的 Storyboard 中的 Interface Builder 中配置您的自定义单元很有用。只需确保设置适当的重用标识符,以便您的控制器始终能够提供正确类型的单元格。

于 2013-07-07T03:48:19.163 回答
0

这可能看起来是一个“糟糕”的决定,但我强烈建议您不要将 UITableView 与 UITextFields 一起使用,除非您有 40 个文本字段,原因如下:

  • 它落后于您描述的方式,因为 NSIndexPath 是在旅途中计算的,并且当您滚动时,用户在文本字段中填写的文本会在表格周围跳跃。

  • 在实施逻辑以从文本字段中获取文本时,您将一团糟。

  • 您将必须实现一大段代码来实现“上下滚动表格”动画,让用户在文本字段中导航,即在textFieldDidBeginEditing

如果您仍想使用 tableview,我建议您为每个 UITextFields 设置一些键,并创建一个数据源(如NSDictionary),将此键绑定到您可以随时从中获取的某个文本值。

那么你可能会有一段丑陋的代码,如下所示:

- (IBAction)textFieldValueChanged:(UITextField *)sender
{
    MyTableCell *cell = (MyTableCell*)sender.superview.superview;
    [self.formDataSource setObject:cell.formTextField.text forKey:cell.contentKey];
}

然后,当您需要时,您可以通过 formDataSourceallValues属性进行枚举。

于 2013-07-07T02:09:51.963 回答