我正在使用custom cell
和XIB。现在我滚动表格,以便具有textFiled的单元格将不可见。在这种情况下,如果我返回textField(意味着我调用[textField resignFirstResponder]
)应用程序将崩溃并给出错误,如
[UITableViewCell _didChangeToFirstResponder:]: message sent to deallocated instance
0xe05aa20.
如果您对此有任何疑问,请与我们联系。
答案 0 :(得分:0)
你应该检查几件事情:
1)在cellForRowAtIndexPath
委托中,当您使用dequeueReusableCellWithIdentifier
时,您应该将endEditing
设置为YES,此视图类似于:
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"]; [cell setEndEditing:YES]; if(!cell) { // Rest of the logic goes here }
2)不要忘记将UITableViewDelegate设置为应该代表实时类的self
。因此,当委托函数调用时,类存在。
答案 1 :(得分:0)
您需要检查TextField是否是第一响应者。如果是,那么你可以安全地辞职
隐藏myTextField的键盘
if ([myTextField isFirstResponder]) {
[myTextField resignFirstResponder];
}
为视图中的任何子视图重新签名第一响应者
for (UIView *aSubView in self.view.subviews) {
if ([aSubView isFirstResponder]) {
[aSubView resignFirstResponder];
//break;
}
}
答案 2 :(得分:0)
使用以下方法解决resignFirstResponder的问题:
[self resignFirstResonder:self.view];
- (BOOL)resignFirstResonder:(UIView *)textView
{
keyBoardShow = NO;
if(badgeHasFullInfo == YES)
{
if (textView.isFirstResponder)
{
[textView resignFirstResponder];
return YES;
}
for (UIView *subView in textView.subviews)
{
if ([self findAndResignFirstResonder:subView])
{
return YES;
}
}
}
return NO;
}