在UITableViewCell内部安装UITextField而无需硬编码文本字段的框架?

时间:2012-11-14 01:48:02

标签: ios uitableview uitextfield

Having a UITextField in a UITableViewCell

我正在使用表格视图制作填写表格(名字,中间名,姓氏),并希望在我的某些单元格中嵌入文本字段。我看到很多关于在UITableViewCell中添加UITextField的例子,如上所述。但是,它们都具有文本字段框架的硬编码值,如此

UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, 185, 30)];

我希望我的文本字段使用单元格的框架或边界。

为了使事情变得更有趣,我的表格视图有四个部分,只有第1部分(有3行)将嵌入文本字段。

为了让事情变得更有趣,我使用弹出控制器来呈现我的表格。

那么在设置框架或边界时,如何在不使用硬编码值的情况下嵌入我的文本字段以适合我的表视图单元格呢?

谢谢!

3 个答案:

答案 0 :(得分:5)

自动调整面具是你的朋友。

cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
CGFloat optionalRightMargin = 10.0;
CGFloat optionalBottomMargin = 10.0;
UITextField *playerTextField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10, cell.contentView.frame.size.width - 110 - optionalRightMargin, cell.contentView.frame.size.height - 10 - optionalBottomMargin)];
playerTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:playerTextField];

答案 1 :(得分:2)

如果您想确保UITextField填充单元格的contentView,那么您可以:

cell = [tableView dequeue....];
if (!cell) {
    cell = ... // create cell
    UITextField *textField = [[UITextField alloc] initWithFrame:cell.contentView.bounds];
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [cell.contentView addSubview:textField];
}

显然,这需要额外的单元格设置,并且应该将某些内容设置为文本字段的委托。但这涵盖了获取文本字段以填充单元格contentView的基础知识。如果单元格的大小发生变化,文本字段将随之改变。

答案 2 :(得分:0)

您可以使用storyboard编辑器通过创建自定义笔尖将其映射出来,然后在cellForRowAtIndexPath中引用

假设你的目标是iOS5 +,那很容易做到。

  1. 使用以下
  2. 在viewDidLoad中设置nib
    [self.tableView registerNib:[UINib nibWithNibName:@"nibname" bundle:nil]  forCellReuseIdentifier:<#(NSString *)#>]
    
    1. 在cellForRowAtIndexPath
    2. 中加载nib
      CellClass *cell = [tableView dequeueReusableCellWithIdentifier:<#(NSString *)#>];
      

      其中CellClass是您为单元格创建的类。

      这种方法可以灵活地定制单元格以及创建特定于单元格的方法。 (例如,如果你在tableView中使用多个单元格模板)。