【问题标题】:UITableViewController and UITextField keyboardUITableViewController 和 UITextField 键盘
【发布时间】:2012-07-04 01:32:38
【问题描述】:

我有一个带有分组静态 UITableView 的 UITableViewController。我正在为故事板上的静态表格视图定义单元格。其中一个单元格中有一个文本字段。当调用此文本字段时,键盘会弹出,但是,tableview 不会像通常在 table view 控制器上那样自动调整大小。所以现在键盘部分覆盖了文本字段,我无法向上滚动。

我的理解是,当你使用 UITableViewController 和 tableview 时,可视区域应该会在调用键盘时自动缩小。它确实在我的应用程序的其他部分按预期工作,只是不适用于这个静态表格视图。它不适用于静态表吗?还有什么我想念的吗?有没有简单的方法来解决这个问题?

谢谢

【问题讨论】:

  • 您可以向上移动视图或手动调整其大小。
  • 问题是为什么正常的时候不自动做呢?
  • 可能是因为您使用的是静态表格视图(如您所料)。静态表视图专门设计为不会更改 - 这就是它们被称为“静态”的原因
  • 是否有关于如何做到这一点的最新、简单的答案?我看过,大多数答案似乎不适用于表格视图(主要是滚动视图)。
  • 请注意,UITableView 继承自 UIScrollView,因此您可以对它执行与对 UIScrollView 执行完全相同的操作。

标签: objective-c ios


【解决方案1】:

回答

它与静态单元格无关。他们应该工作。

如果您的控制器已经是 UITableViewController,请检查您是否使用了方法viewWillAppear。如果你这样做了,你必须打电话给[super viewWillAppear:YES] 才能让“自动行为”工作。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up'
   // Do other stuff
}

这个问题很容易出现,因为控制器的样板代码没有附带viewWillAppear 方法调用,如果你在控制器中定义它,你会覆盖它。

额外信息

看看这个链接。

Apple Table View Programming Guide

注意:UITableViewController 在 iOS 3.0 中有新功能。一种 表视图控制器支持表视图行的内联编辑;如果, 例如,行在编辑模式下嵌入了文本字段,它 在虚拟键盘上方滚动正在编辑的行 显示....等等....

重要的一点

UITableViewController 类通过以下方式实现上述行为 重写 loadView、viewWillAppear: 和其他继承自的方法 界面视图控制器。在你的 UITableViewController 子类中,你可以 还覆盖这些方法以获得专门的行为。如果你这样做 覆盖这些方法,一定要调用超类 方法的实现,通常作为第一个方法调用,得到 默认行为。

【讨论】:

  • 我在这里发布后不久发现它与静态表无关。我创建了一个测试静态表,它运行良好,所以我知道它与我的代码有关。你是 100% 正确的。它是 [super viewWillAppear:YES];。一旦我将它添加到我的 viewWillAppear 中,它就起作用了。我猜想它是如何被删除的。这周我害怕修复它,结果发现它真的很容易。谢谢
  • 干杯人。您的问题将我指向文档,我学到了另一个问题 =)
  • 很好的答案,可耻的是你没有更多的赞成票。无论如何,这是一个。
  • @GordonDove 谢谢。我为以后的读者做了更简洁的说明。
  • 你是个先知!!?!?!该死的复制和粘贴让我将 super.viewWillDisappear 放入 viewWillAppear。感谢您的建议,键盘的行为不像一个好公民。赞成票。
【解决方案2】:

对于斯威夫特

override func viewWillAppear(animated: Bool) {

   super.viewWillAppear(animated)

}

【讨论】:

    【解决方案3】:

    如果选择了其中一个表格形式进行编辑,则将视图向上推(需要键盘通知实现)

    - (void) keyboardDidShow:(NSNotification *)aNotification
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.25];
        self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount);
        [UIView commitAnimations];
        isRaised = [NSNumber numberWithBool:YES];
    }
    

    调整表格的大小(将高度除以 2)。把它换成键盘确实显示方法。另外,您可以使用键盘确实隐藏的方法来撤消这些东西。

    CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, mineTable.frame.size.height/2);
    mineTable.frame = temp;
    

    【讨论】:

    • 这是完整的答案吗?好像有些东西不见了。
    • 好吧,我不想向您展示一堆您已经知道如何编码的东西。我确实告诉过你该怎么做(实现键盘通知)。这只是一些示例代码,可以为您指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多