1

我正在尝试将 UITextField 动态添加到 TableView 这是我的代码

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(110, 10, 185, 30)];
textField.tag=temp+indexPath.row+1;

[cell.contentView addSubview:textField];

问题是每次显示一个单元格时,它都会在同一位置创建一个新文本字段,因此它们重叠,我无法在另一个文本字段中进行编辑,并且它们具有相同的标签。我只想为每个单元格创建一个文本字段,即使它将再次显示

4

4 回答 4

2

您需要创建自定义 UITableViewCell 类

TableViewCellWithTextField.h

#import <UIKit/UIKit.h>

@interface TableViewCellWithTextField : UITableViewCell
@property(nonatomic,strong) UITextField *textField;
@end

TableViewCellWithTextField.m

@implementation TableViewCellWithTextField

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        _textField = [[UITextField alloc]initWithFrame:CGRectMake(110, 10, 185, 30)];
        [self addSubview:_textField];
        // Initialization code
    }
    return self;
}
@end

然后你可以像这样使用你的文本字段:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString * cellIdentifier= @"Cell"
    TableViewCellWithTextField *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if(!cell)
    {
        cell = [[TableViewCellWithTextField alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    cell.textField.tag = temp + indexPath.row + 1;
}
于 2013-05-10T08:51:03.463 回答
1

如您所知,您使用的方式会导致内存泄漏。因此,您可以创建一个自定义单元格,该单元格具有 textview 作为属性并在 cellForRowAtIndexPath: 方法中访问 textview。每个单元格只有一个文本视图,可以通过属性访问,就像您访问单元格的标签一样。

另一种方法是使用 cellForRowAtIndexPath: 方法中的标签访问文本视图,而不是每次都创建。

于 2013-05-10T08:40:52.447 回答
1

您可能应该为所有文本字段(无论它们在哪个表格视图单元格中)提供相同的标签 TEXT_FIELD_TAG 其中

#define TEXT_FIELD_TAG 1000

每次调用 tableView:cellForRowAtIndexPath: 时,都应该检查是否已经存在带有 TEXT_FIELD_TAG 的子视图,如下所示:

UITextField *textField = [cell.contentView viewWithTag: TEXT_FIELD_TAG];
if(!textField){
    textField = [[UITextField alloc]initWithFrame:CGRectMake(110, 10, 185, 30)];
    textField.tag=temp+indexPath.row+1;
    [cell.contentView addSubview:textField];
}

如果 textField = nil 那么您需要创建一个新的 UITextField 并将其添加到内容视图中。

于 2013-05-10T08:42:09.470 回答
0

我终于在你的帮助下发现了它

if (![cell.contentView viewWithTag:temp+indexPath.row+1 ]) {
     UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(110, 10, 185, 30)];

    textField.tag=temp+indexPath.row+1;

    textField.delegate=self;

    textField.autocorrectionType = UITextAutocorrectionTypeNo;
   // textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

    [cell.contentView addSubview:textField];

所以在这里我将保证每个单元格只创建一次 UITextField ...

}
于 2013-05-10T09:19:53.213 回答