我试图将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];
问题是每次显示一个单元格,它在同一个位置创建一个newTextField,因此它们overLap并且我无法在另一个TextField中进行编辑,并且它们具有相同的Tag。 我想为每个单元格创建一个TextField,即使它将再次显示
答案 0 :(得分:2)
您需要创建自定义UITableViewCell类
#import <UIKit/UIKit.h>
@interface TableViewCellWithTextField : UITableViewCell
@property(nonatomic,strong) UITextField *textField;
@end
@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;
}
答案 1 :(得分:1)
正如您所知,您使用的方式会导致内存泄漏。因此,您可以创建一个自定义单元格,该单元格具有textview作为属性,并可以访问cellForRowAtIndexPath:方法中的textview。每个单元格只有一个文本视图,可以通过属性访问,就像访问单元格的标签一样。
另一种方法是使用cellForRowAtIndexPath:方法中的标记访问textview,而不是每次都创建。
答案 2 :(得分: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并将其添加到内容视图中。
答案 3 :(得分: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];
所以在这里我将保证每个Cell只会创建一次UITextField ...
}