TextField resignFirstresponder将在ios 7中崩溃

时间:2014-01-28 06:54:37

标签: ios iphone uitableview ios7 uitextfield

我正在使用custom cell和XIB。现在我滚动表格,以便具有textFiled的单元格将不可见。在这种情况下,如果我返回textField(意味着我调用[textField resignFirstResponder])应用程序将崩溃并给出错误,如

[UITableViewCell _didChangeToFirstResponder:]: message sent to deallocated instance
0xe05aa20. 

如果您对此有任何疑问,请与我们联系。

3 个答案:

答案 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;
}