我有一个自定义的UITableViewCell(子类),它很棒。单元格的一部分是UITextField,我在外部公开为@property。但是,所有内容都在单元内部进行管理,包括在initWithStyle函数中分配+设置UITextField。
我注意到的是当我创建一个体面的大小的桌子(比一次可以在页面上显示更多的单元格)然后选择一个UITextField,键入一点,最后向下滚动并选择另一个单元格,我的程序崩溃。
当我:
时,我的程序不崩溃现在,我目前还没有重复使用单元格,但是一旦所有的错误都出来了。
查看崩溃堆栈,这似乎正在发生,因为程序正在尝试重新签名原始文本字段的第一个响应者。此文本字段是否被意外取消分配?我不这么认为,因为我能够选择一个单元格,在屏幕外滚动,开始输入,然后一直向上滚动并查看我刚输入的内容。内部*文本字段指针是否已被更改?它应该不是因为我只在initWithStyle中指定它:reuseIdentifier:重载的UITableViewCell的函数 - 即使它是,它不是我辞职;我甚至不在我的代码中的任何地方调用resignFirstResponder。
那么有没有办法可以识别我的UIView(例如UITableViewCell)是否已经滚动屏幕(从UITableViewCell内部 - 最好是通过重载某些方法)?我想到了viewDidUnload,但这是针对viewControllers的。如果我有这样的方法,我会在文本字段上使用它来resignFirstResponder以及我想要处理的任何其他处理。
一些代码:
// In the .h
@interface mycell:UITableViewCell <UITextFieldDelegate>;
@property (nonatomic, retain) UITextField *textfield;
@end
// In the .m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuse];
if (!self) return self;
self.textfield = [[UITextField alloc] initWithFrame:CGRectZero];
[self.textfield setDelegate:self];
[self addSubview:self.textfield];
return self;
}
建议欢迎。