gpt4 book ai didi

objective-c - 了解第一响应者的系统逻辑

转载 作者:可可西里 更新时间:2023-11-01 03:12:05 24 4
gpt4 key购买 nike

我对几个第一响应点感到困惑:

  1. 如果我调用- becomeFirstResponder,系统会先调用– canBecomeFirstResponder吗?为什么?
  2. 为什么同时存在 - becomeFirstResponder– canBecomeFirstResponder?在什么情况下它们可以返回不同的值?
  3. 应用程序是否每次都必须有第一响应者?如果是这样,当我在某个对象上调用 – resignFirstResponder 时发生了什么? UIApplication 是立即成为第一响应者,还是在响应者链中的某个点抛出了这个“ token ”?当我想摆脱那个朝圣者 token 时,我可以在 UIApplication 对象上调用 - becomeFirstResponder 吗?
  4. ...

请有人向我解释一下,系统如何管理其第一响应者。当某个对象成为第一响应者时,幕后发生了什么,当第一响应者辞职时又发生了什么。系统调用什么...谢谢!

最佳答案

  1. becomeFirstResponder 的默认实现会调用 canBecomeFirstResponder。这是因为从 canBecomeFirstResponder 返回 NO 的响应者不应成为第一响应者。
  2. 如果成功,
  3. becomeFirstResponder 将使接收者实际成为第一响应者。 canBecomeFirstResponder 只是检查接收者是否愿意成为第一响应者,实际上并没有改变任何东西。如果当前第一响应者拒绝辞职,becomeFirstResponder 可能会失败。在其他情况下,becomeFirstResponder 也可能会失败。
  4. 您的代码中不必有任何具有第一响应者状态的内容。通过私有(private) UIResponder 方法 firstResponder 判断,在这种情况下系统不会分配任何特定的默认值。

基本上,当某物想要成为第一响应者时,当前的第一响应者(如果有的话)会被要求辞职,然后新对象成为第一响应者。这可能会导致系统显示屏幕键盘或采取一些其他操作。当第一响应者辞职时,这可能同样导致系统隐藏屏幕键盘或采取一些其他行动。

当一个非触摸事件进来时,首先传递给UIWindow。 UIWindow 将其传递给第一响应者。该文档似乎没有指定 UIWindow 是否尝试自己处理事件(如果它自己不处理,则像往常一样将其传递给 UIApplication),或者如果没有第一响应者则忽略该事件。

参见 the documentation了解详情。

关于objective-c - 了解第一响应者的系统逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com