【问题标题】:Are there iPhone Notifications for all UIResponders?所有 UIResponder 都有 iPhone 通知吗?
【发布时间】:2009-06-05 22:34:24
【问题描述】:

我知道 iPhone 上的这些通知,因为当它们被键盘遮挡时,您可能需要它们将文本视图滚动到位:

  • UIKeyboardWillShowNotification
  • UIKeyboardDidShowNotification
  • UIKeyboardWillHideNotification
  • UIKeyboardDidHideNotification

现在,我想在每次用户输入某些输入时使用 ANY 控件更新某个值。但我在这里处理各种不同的控件 - TextViews、TextFields、Pickers、SegmentedViews 等。

有没有一种方法可以注册所有 UIResponder 发送的通知?

我正在寻找上面列出的通知类型以外的通知类型 - 任何地方都有明确的列表吗?

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

    理论上,通过查看您可以在 IB 中附加到操作的事件类型,valueChanged 将是完美的(这些不是通知)。

    遗憾的是,并非所有类型的响应者都会触发它。所以没有一个很好的通用方法来做到这一点......也许可以将一个类放在一起,该类具有处理所有类型的动作的方法,并与页面上的元素相关联。

    【讨论】:

      【解决方案2】:

      如果您想接收所有通知,只需注册名称为nil即可:

      [[NSNotificationCenter defaultCenter] addObserver:self
                                               selector:@selector(handleNotification:)
                                                   name:nil
                                                 object:nil];
      

      然后,您可以在确定您可以接收哪些通知后确定您真正想要处理的通知。

      【讨论】:

        【解决方案3】:

        我不确定我的问题是否正确,但您可以在添加观察者时通过为 object 参数传递 nil 来注册任何对象发送的通知:

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardExposes:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
        

        在更好地理解你的问题后,我附加了这个:

        没有所有通知的明确列表,因为它们的类型(名称)只是一个字符串,任何人都可以发明新的通知(包括仅供私人使用)。但您可以轻松列出来自 iPhone SDK 的声明通知:

        find  /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.1.sdk/ \
          -name "*.h" -exec cat {} \; \
          | grep -E "NSString[[:space:]]*\*[[:space:]]*(const)?[[:space:]]*[[:alnum:]]+Notification" \
          | grep -E -o "[[:alnum:]]+Notification"
        

        这列出了 46 条通知。

        【讨论】:

        • 我正在寻找除我列出的通知之外的其他类型的通知,我可以利用这些通知来跟踪其他事件。
        猜你喜欢
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多