UIView被销毁时的通知

时间:2012-09-18 04:34:53

标签: ios5 uiview uitableview

我有一个自定义的UITableViewCell(子类),它很棒。单元格的一部分是UITextField,我在外部公开为@property。但是,所有内容都在单元内部进行管理,包括在initWithStyle函数中分配+设置UITextField。

我注意到的是当我创建一个体面的大小的桌子(比一次可以在页面上显示更多的单元格)然后选择一个UITextField,键入一点,最后向下滚动并选择另一个单元格,我的程序崩溃。

当我:

时,我的程序崩溃
  • 重复上述步骤减去原始单元格中的输入
  • 键入UITextField,然后滚动并键入close by text字段。
  • 直接跳转到任何特定文本字段并开始输入

现在,我目前还没有重复使用单元格,但是一旦所有的错误都出来了。

查看崩溃堆栈,这似乎正在发生,因为程序正在尝试重新签名原始文本字段的第一个响应者。此文本字段是否被意外取消分配?我不这么认为,因为我能够选择一个单元格,在屏幕外滚动,开始输入,然后一直向上滚动并查看我刚输入的内容。内部*文本字段指针是否已被更改?它应该不是因为我只在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;
}

建议欢迎。

0 个答案:

没有答案