键盘打开时iPhone向上滚动视图

Posted

技术标签:

【中文标题】键盘打开时iPhone向上滚动视图【英文标题】:iPhone scrolling the view up when keyboard is open 【发布时间】:2010-05-11 18:06:05 【问题描述】:

我知道这个问题非常普遍,我已经阅读了很多答案,但无法理解代码的工作原理。这有效:

-(void)textFieldDidBeginEditing:(UITextField *)sender

if ([sender isEqual:txtLeaveAddyLine1])

    //move the main view, so that the keyboard does not hide it.
    if  (self.view.frame.origin.y >= 0)
    
        [self setViewMovedUp:YES];
    
 

在这个例子中,txtLeaveAddy 是第一个被键盘隐藏的 UITextField,它的作用就像一个魅力。当我循环浏览屏幕上的文本字段时,当用户进入该 txtLeaveAddyLine1 字段时,它会向上滚动。但是,当我尝试在 txtLeaveAddyLine1 字段下方添加字段时 - 没有任何反应。例如:

-(void)textFieldDidBeginEditing:(UITextField *)sender

    if ([sender isEqual:txtLeaveAddyLine1])
    
        //move the main view, so that the keyboard does not hide it.
        if  (self.view.frame.origin.y >= 0)
        
            [self setViewMovedUp:YES];
        
     
    if ([sender isEqual:txtLeaveAddyLine2])
    
        //move the main view, so that the keyboard does not hide it.
        if  (self.view.frame.origin.y >= 0)
        
            [self setViewMovedUp:YES];
        
     

我没有正确使用这个功能吗?

【问题讨论】:

【参考方案1】:

执行此操作的常用方法是将文本字段放在表格视图中。当文本字段开始编辑时,获取其所在单元格的索引路径并调用:

[tableView scrollToRowAtIndexPath:indexPath 
                 atScrollPosition:UITableViewScrollPositionMiddle 
                         animated:YES];

【讨论】:

如何在表格视图中设置 UITextFields 和 Labels?每次我尝试在表格视图上放置一个文本字段或标签时,这真的很困难——它不想让我把它放在某些地方。 创建一个带有标签和文本字段的自定义 UITableViewCell。然后使用该单元格填充表格。【参考方案2】:

http://www.iphonesampleapps.com/2009/12/adjust-uitextfield-hidden-behind-keyboard-with-uiscrollview/

【讨论】:

【参考方案3】:

setViewMovedUp 不是内置的 - 我认为它的代码来自 Apple 示例。 (如果您的版本与我发现的版本不同,则以下可能不适用...)

它不会神奇地移动到正确的位置,它只是将视图移动一个固定的量。我想您需要查看该函数并确定视图需要为每个字段移动多远,然后修改视图以根据字段位置更改视图的移动量。要么用 select case 语句硬连线一些简单的东西,要么传入发送者并查看它的框架以找出将视图移动到的位置。

【讨论】:

请参阅下面的 Rob 自己的答案 - 似乎完美地涵盖了它。

以上是关于键盘打开时iPhone向上滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

键盘打开时相应向上滚动 RecyclerView

iPhone:滚动网页视图时需要保持键盘向上吗?

滚动视图 iPhone 内的文本字段

在 iPhone 上打开键盘时 Cordova 应用程序滚动

用于在滚动视图中跟踪对象的 Popover 箭头

键盘出现多次时,滚动视图不会向上移动