【问题标题】:Making a tableviewcell scroll up on displaying keyboard在显示键盘上使 tableviewcell 向上滚动
【发布时间】:2011-08-30 19:16:12
【问题描述】:

我有一个带有 UITextField 的 UITableViewCell。在编辑模式下,当键盘出现时,我试图编辑的行被键盘重叠。理想情况下,该行应该向上滚动,以便我可以编辑单元格。

我已经彻底搜索了 stackoverflow 并找到了几种不同的解决方案。它们中的大多数与向上移动或滚动视图的计算有关。现在有一个来自苹果的示例代码,名为 TaggedLocations。它们具有完全相同的行为。并且没有代码进行任何复杂的计算来向上移动视图。

我还彻底检查了 IB 界面,也找不到任何花哨的东西。如果您下载并运行代码,它会将行向上推到适合编辑的完美位置。

有人知道 TaggedLocations 项目中有什么技巧可以如此优雅地做到这一点吗?项目地点: http://developer.apple.com/library/ios/#samplecode/TaggedLocations/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40008914

对于我所指的复杂计算,请查看以下线程示例:

How to make a UITextField move up when keyboard is present?

谢谢

【问题讨论】:

    标签: iphone xcode uitableview uitextfield


    【解决方案1】:

    RootViewController.m 中的这一行是导致滚动的原因:

    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    

    把它放在你的 cellForRowAtIndexPath: 方法中,它应该可以工作。

    【讨论】:

    • 我试过了。不是这个。这只会在添加新事件时发挥作用。如果您看到,滚动条也可用于编辑。此外,标签选择也具有类似的行为,并且没有您提到的滚动代码。此外,它不在 cellForRowAtIndexPath: 方法中。
    • 对不起,cellForRowAtIndexPath: 可能不是最好的方法。让你的类符合 UITextFieldDelegate 怎么样,然后在textFieldDidBeginEditing 中你以某种方式获得该行的索引路径textfield在里面,然后在那个方法中调用上面那行代码?我并没有真正深入研究 Apple 的代码,但“scrollToRowAtIndexPath”似乎正是您想要的......
    • 抱歉,这不是正确的代码。这是行不通的。即使您将其注释掉,您也会得到相同的行为。
    【解决方案2】:

    我发现了问题所在。 最初我有

    标签栏控制器
    - UIViewController
    -- UINavigationController
    --- UITableViewController

    - UIViewController
    --UINavigationController
    --- UITableViewController

    使用这种层次结构,在显示键盘时表格单元格不会卷起。但是,如果我将层次结构更改为以下,则无需任何额外代码就可以正常进行滚动!

    标签栏控制器
    - UINavigationController
    -- UITableViewController

    - UINavigationController
    -- UITableViewController

    当我复制 Apple 代码时,我不知何故弄乱了层次结构。现在切换到新的层次结构,它工作正常。 无需额外的代码或计算。

    【讨论】:

    • 我有完全相同的问题,但是我有你提到的解决了你的问题的 heirachy。但是我的问题仍然存在。您是否遇到任何其他可能导致它发生的问题?
    • 谢谢。你的回答真的很有帮助。一个小补充,如果你不能从你的层次结构中消除 UIViewController ,你可以创建一个 UINavigationController ,将你的 tableview 控制器作为它的根,并将导航控制器的视图作为子视图添加到你的 VC 中。希望对某人有所帮助!。
    【解决方案3】:

    如果您有自己的控制器层次结构,则调用 viewWillAppear...然后表格视图将自动滚动单元格以在键盘出现时可见。

    【讨论】:

      【解决方案4】:

      我对 Apple 的示例代码 TaggedLocations 有类似的困惑,尽管在我的情况下,我意识到我的表格视图是由 UIViewController 子类而不是 UITableViewController 子类管理的,并且 UITableViewController 显然为您管理滚动。它工作得很好,所以很多这些复杂的计算都是不必要的。我希望我没有花太多时间试图弄清楚它们。

      我不明白为什么你描述的层次结构很重要。只要 UITableViewController 管理文本字段,它就应该自动处理滚动以避免键盘。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 2014-11-23
        • 2018-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多