【问题标题】:How to specify notificationSender? (Cocoa Touch)如何指定通知发送者? (可可触摸)
【发布时间】:2009-04-03 17:27:05
【问题描述】:

我能找到的所有设置通知的示例如下所示:

[nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil];

object 总是被设置为 nil。 object 是 notificationSender,在文档中是这样定义的:

"观察者想要接收其通知的对象;即只有这个发送者发送的通知才会被传递给观察者。当为nil时,通知中心不使用通知的发送者来决定是否将其传递给观察者观察者。”

我只想为一个特定的文本视图接收键盘通知,所以我想告诉 addObserver,但我不知道该给对象什么。我尝试了绑定到我感兴趣的文本视图的出口变量,但这只是导致我根本没有收到任何通知。

有什么建议吗?

【问题讨论】:

    标签: iphone cocoa-touch nsnotifications addobserver


    【解决方案1】:

    UIKeyboardWillShowNotification 来自您的窗口实例,出于所有意图和目的,它是一个“系统”通知。键盘要么显示要么不显示,它并不是真正与特定控件相关联的东西。

    如果您想在用户输入特定文本字段时执行某些操作,您可能应该在文本字段的委托中控制它。

    【讨论】:

      【解决方案2】:

      在这种情况下,您无法仅获得一个特定文本视图的通知,因为 UIKeyboardWillShowNotification 的文档说“通知对象为零。”。

      如果你的特定文本视图是FirstResponder,你必须检查你的keyboardWillShow impl。

      【讨论】:

        【解决方案3】:

        我有两个相互竞争的需求 - 我必须使用键盘通知,因为我需要获取键盘高度,这似乎只能通过这种方式获得,但我还需要知道我在哪个文本视图中,这也意味着使用 textViewDidBeginEditing 委托。经过一番折腾后,我终于求助于在通知方法中获取键盘高度并将其存储在实例变量中,然后可以在委托方法中使用(我需要向上滚动视图,因此底部文本视图不是大部分当他们开始打字时隐藏在他们的键盘下)。有点不雅,但很管用。

        感谢指点!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          相关资源
          最近更新 更多