在我的应用程序中,我在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中的如何为每个细胞制作固定位置的东西或技巧?
答案 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中配置自定义单元格。只需确保设置适当的重用标识符,以便控制器始终能够提供正确类型的单元格。