UITextField在UITableViewCell中

时间:2013-07-06 21:20:44

标签: ios

在我的应用程序中,我在UITextField内创建UITableViewCell,以便用户可以填写一些信息。这是我的代码:

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];  
}

我这样做是因为我只为每个单元格创建UITextField一次,以便textFields不重叠......但是例如当用户在textfields中写入时出现问题:

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

依此类推,如果你的行数超过10并且你开始滚动我可以注意到单元格随机地交换索引,所以我可以得到类似的东西:

row 0 -> 3
row 1 -> 1
row 2 -> 2
row 3 -> 0
row 4 -> 4
UITextField.text中的

如何为每个细胞制作固定位置的东西或技巧?

2 个答案:

答案 0 :(得分:0)

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

  • 它落后于您描述的方式,因为计算了NSIndexPath go和用户在文本字段中填写的文本会跳转 滚动时围绕桌子。

  • 在实施逻辑以获取文本时,你会遇到麻烦 文本域。

  • 您必须实现一大段代码才能实现“滚动” 上下表“动画让用户浏览文本字段, 即在textFieldDidBeginEditing

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

然后你可能会有一段丑陋的代码:

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

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

答案 1 :(得分: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中配置自定义单元格。只需确保设置适当的重用标识符,以便控制器始终能够提供正确类型的单元格。