自定义tableViewCell中textField resignFirstResponder后的tableView frame.origin问题

Posted

技术标签:

【中文标题】自定义tableViewCell中textField resignFirstResponder后的tableView frame.origin问题【英文标题】:tableView frame.origin problem after textField resignFirstResponder in custom tableViewCell 【发布时间】:2009-08-20 22:08:07 【问题描述】:

我正在使用带有自定义单元格的 tableView。当我想使用 navigationController 的 pushViewController 函数显示另一个视图时,我会遍历文本字段并在它们上调用 resignFirstResponder。但是 resignFirstResponder 仅在显示文本字段时才起作用,因此我首先滚动到页面顶部。这是代码:

NSIndexPath *topIndexPath;
topIndexPath = [[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0];
[self.tableView scrollToRowAtIndexPath:topIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];

[[self textFieldForRow:0] resignFirstResponder];
[[self textFieldForRow:1] resignFirstResponder];
[[self textFieldForRow:2] resignFirstResponder];
[[self textFieldForRow:3] resignFirstResponder];

这可行,但在此之后,我的 tableView 的来源出现了一些奇怪的问题。我尝试将它的 superviews origin 设置为 0,但这没有帮助。

这里是问题的截图:link

如您所见,我的tableview太大,滚动条到达底部时卡在视图中间。

对不起我的英语,希望你能理解我,

提前致谢!

汉斯

【问题讨论】:

【参考方案1】:

其实很简单。只需将您的 resignFirstResponder 放入 -viewWillDisappear

编辑:这更好,更少hacky,我将它添加到我的课程中,并且它有效:

edit 2:使用之前的代码时,您的应用似乎会被拒绝。这是一个更新的公共 api 版本:

- (void)viewWillDisappear:(BOOL)animated

    [self.view findAndResignFirstResponder];

还有:

@implementation UIView (FindAndResignFirstResponder)
- (BOOL)findAndResignFirstResponder

    if (self.isFirstResponder) 
        [self resignFirstResponder];
        return YES;     
    
    for (UIView *subView in self.subviews) 
        if ([subView findAndResignFirstResponder])
            return YES;
    
    return NO;

@end

(来源:Get the current first responder without using a private API)

【讨论】:

某人的应用因使用此方法而被应用商店拒绝。如果你有兴趣,它在这个线程中。 ***.com/questions/1823317/…【参考方案2】:

我会解决您的其他问题。我想当你说当其他文本字段在屏幕上时你不能调用“resignFirstResponder”时,你的意思是发生了崩溃?

如果是这样,那是因为屏幕单元格不存在,因此文本字段也消失了。它们被回收(因此它们可以出列以获取新单元格)。

简单的解决方案是仅在屏幕上的文本字段上调用 ​​resignFirstResponder。

你现在做的事情看起来有点老套。

【讨论】:

问题是我的tableView在底部的时候,没有显示textField,但是还是显示了键盘。当文本字段即将离开屏幕时,有没有办法退出键盘?

以上是关于自定义tableViewCell中textField resignFirstResponder后的tableView frame.origin问题的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 UIView 添加到 TableViewCell

在自定义 tableviewcell 中更改 UIImage

无法在自定义 TableViewCell 中编辑 UITextView

在自定义 TableViewCell 中动态更改 UILabel 框架

TapGestures 在自定义 TableViewCell 中不起作用

在情节提要中使用自定义 tableviewcells 时,IBOutlet 为零