【问题标题】:resignFirstResponder issue with UITextField in custom UITableViewCell自定义 UITableViewCell 中的 UITextField 的 resignFirstResponder 问题
【发布时间】:2016-02-16 15:42:05
【问题描述】:

我有一个UITableView 和自定义UITableViewCell 每个单元格包含一个UILabelUITextField,如下所示。我在键盘顶部添加了一个Done 按钮,用于隐藏键盘。

现在假设第二行的 textField 是firstResponder,那时如果我将表格视图滚动到顶部并从可见矩形移出第二行。现在,如果我按下Done 键,然后在我使用[[self view] endEditing:YES]; 的地方触发方法,应用程序就会崩溃。

为了解决这个问题,我实现了下面的方法,我得到了成功。

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    for(UIView *contentView in [[cell contentView] subviews])
    {
        if([contentView isKindOfClass:[UIView class]])
        {
            for(UITextField *textField in [contentView subviews])
            {
                if([textField isKindOfClass:[UITextField class]] && [textField isFirstResponder])
                {
                    [textField resignFirstResponder];
                    break;
                }
            }
        }
    }
}

现在的问题是,如果我在第二行从可见矩形移出时执行相同的场景,则上述方法会被触发并且键盘会按预期自动隐藏。但是当时当我将表格视图向下拖动并再次在第二行移动到可见矩形时,它的颜色发生了变化。

为了解决颜色问题,我实现了以下方法,但它不起作用

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

不仅仅是颜色问题。再次,如果我触摸第二行键盘的 textField 并且如果我执行相同的场景 tableView didEndDisplayingCell 方法不会为该单元格触发。即使我按下Done 键应用程序也崩溃了。异常刹车点指向[[self view] endEditing:YES]; 并显示错误

请大家帮帮我。我浪费了很多时间去弄清楚,但我失败了。

【问题讨论】:

  • 你能展示调用[[self view] endEditing:YES]的整个方法吗?
  • 我打电话给[[self view] endEditing:YES]; 与键盘相连的按钮的触摸事件

标签: ios iphone objective-c uitableview


【解决方案1】:

当一个单元格被滚动出视图并被移除时,UIKit 会调用 didEndDisplayingCell。但是,当它有一个具有焦点的编辑控件时,不会调用 didEndDisplayingCell。

一种可能的替代方法是通过设置在拖动时关闭键盘

tableView.keyboardDismissMode = .OnDrag

这会导致 UITextView 放弃第一响应者并因此调用 didEndDisplayingCell。

更多详情here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多