【问题标题】:tableView frame.origin problem after textField resignFirstResponder in custom tableViewCell自定义tableViewCell中textField resignFirstResponder后的tableView frame.origin问题
【发布时间】: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太大,滚动条到达底部时卡在视图中间。

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

提前致谢!

汉斯

【问题讨论】:

    标签: iphone objective-c uitableview


    【解决方案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

    【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 问题是我的tableView在底部的时候,没有显示textField,但是还是显示了键盘。当文本字段即将离开屏幕时,有没有办法退出键盘?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多