UITableViewController 没有响应键盘

Posted

技术标签:

【中文标题】UITableViewController 没有响应键盘【英文标题】:UITableViewController not responding to keyboard 【发布时间】:2014-08-11 11:45:04 【问题描述】:

我试图让 tableview 适应 Swift 中键盘的显示。 根据文档,如果 tableview 是 UITableViewController 的子类,它应该自动调整。 已经在这里阅读了很多答案,只是为了确保我得到了所有答案:

它是 UITableViewController 的子类

class SettingsController: UITableViewController

ViewWillAppear 没有被覆盖,所以我不需要调用super.viewWillAppear(true)

我在静态 tableview 单元格中只有一个文本字段,但是当键盘出现时,tableview 不会滚动。

除此之外,我尝试实现通知

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown", name: UIKeyboardDidShowNotification, object: self)

用函数

func keyboardWasShown(notification: NSNotification) 
    println("Keyboard shown")

但该函数永远不会被调用。

谁能帮帮我?为什么tableview没有滚动,为什么没有触发通知?

问候,

罗恩

【问题讨论】:

我可能错了,但我相信您必须在选择器后添加一个冒号以表明它需要参数,所以NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: self) 嗨,杰克,已经试过了,现在又试了一次,但没有帮助。还是谢谢。 嗨 Ron,你找到 UITableViewController 不自动滚动的原因了吗?我有同样的问题 嗨@Borbea,我从未真正找到导致问题的原因。我通过键盘通知手动修复它。 【参考方案1】:

我认为问题在于您将 self 作为对象传递给函数。 Self 是 SettingsController 类型,因此当它使用 SettingsController 参数查找名为“keyboardWasShown:”的方法时,它找不到。这可以通过两种方式解决,或者将第一行更改为传入一个 nil 值:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: nil)

或者更改方法以接受 SettingsController

func keyboardWasShown(settingsController: SettingsController) 
    println("Keyboard shown")

希望这能解决您遇到的任何问题。

【讨论】:

是的,就是这样。我一开始以为它会崩溃。但我认为这是将“:”添加到选择器并将对象设置为零的组合。但我仍然不明白为什么 tableviewcontroller 不会自动执行。 Apple 的文档说应该这样做。

以上是关于UITableViewController 没有响应键盘的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableViewController 中没有调用 cellForRowAtIndex?

在 UITableViewController 中没有调用 viewWillAppear?

UIViewController 子类(模仿 UITableViewController)没有被释放

没有在 UITableViewController 中调用 DidSelectRowAt

UITableViewController 在初始化时没有选择单元格

为啥 UIViewController 在 UINavigationBar 下扩展,而 UITableViewController 没有?