【问题标题】:How to use UIKeyboardWillShowNotification如何使用 UIKeyboardWillShowNotification
【发布时间】:2010-07-19 04:27:48
【问题描述】:

我想创建一个与 iPhone 的短信应用程序 (Messages) 完全一样的 ChatView。我正在以编程方式进行操作,并尝试使用键盘将 textView 向上移动。我想在 UIKeyboardWillShowNotification 调用的函数中执行此操作。你能帮我调试一下这个错误吗?

在 ChatViewController.m 中,我在 loadView 函数中为 UIKeyboardWillShowNotification 设置了一个侦听器,并将 self 设置为 textView 委托,但它崩溃了,说: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[ChatViewController keyboardWillShow]:无法识别的选择器已发送到实例

但我在 ChatViewController.m 中定义了 keyboardWillShow 为什么找不到那个函数?

以下是重要文件:

http://github.com/acani/acani-chat/blob/master/Lovers/Classes/ChatViewController.h http://github.com/acani/acani-chat/blob/master/Lovers/Classes/ChatViewController.m

我注释掉了监听器,这样它就不会崩溃。

随意 git clone git@github.com:acani/acani-chat.git

谢谢!

【问题讨论】:

  • Github 不存在了?

标签: iphone chat uitextview uitextviewdelegate


【解决方案1】:

您已注释掉的第 120 行和第 121 行,但我认为不应该如此,因为没有其他参考订阅通知,当您传递选择器时会出现问题。 Objective-C 消息名称中的冒号 (:) 是名称本身的一部分。因此,您在传入的选择器中缺少一个尾随冒号。修复它,这将消除您的错误。

此外,您应该考虑在视图消失时调用removeObserver: (viewDidUnload)。

【讨论】:

  • 澄清一下,您的意思是 @selector(keyboardWillShow:) 而不是 @selector(keyboardWillShow)(同样适用于 s/Show/Hide/)。如果该类曾经注册通知,我还强烈建议在 dealloc 中使用 [[NSNotificationCenter defaultCenter] removeObserver:self]
  • 如果他在 -viewDidLoad 中注册通知,那么只在 -dealloc 中进行通知是没有意义的;例如,因为他可以转到另一个视图,然后在不释放它的情况下返回此视图。 -viewDidUnload 是一个更好的地方。而且我知道我的意思,我没有用勺子喂他答案,因为我觉得解释更好。
猜你喜欢
  • 1970-01-01
  • 2011-02-28
  • 2016-07-02
  • 1970-01-01
  • 2010-12-08
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多