【发布时间】:2019-07-24 00:45:35
【问题描述】:
当点击子视图 (imageSlideshow) 时调用此代码:
imageSlideshow.didTap = { [weak self] in
guard UIApplication.shared.sendAction(#selector(ImageCarouselViewResponder.didTapImageCarousel(sender:)), to: nil, from: self, for: nil) else {
assertionFailure("No target for ImageCarouselViewResponder.didTapImageCarousel(sender:)")
return
}
…
这可以按预期工作,正如您从以下调试输出中看到的那样:
(lldb) po UIApplication.shared.sendAction(#selector(ImageCarouselViewResponder.didTapImageCarousel(sender:)), to: nil, from: self, for: nil)
true
但是,当我尝试使用相同的选择器请求目标时,它是 nil:
(lldb) po UIApplication.shared.target(forAction: #selector(ImageCarouselViewResponder.didTapImageCarousel(sender:)), withSender: self)
nil
此外,我添加了一个扩展来遍历响应者树以找到第一个响应者,在这种情况下它返回 nil。
如果没有第一响应者,sendAction(…) 如何工作?
【问题讨论】:
-
你在Cocoa Event Handling Guide看到这个页面了吗?
-
所以文件说系统将事件下面的项目作为第一响应者,但如果是这样的话,我仍然不明白为什么
target(forAction:)返回nil。
标签: ios uikit first-responder uiresponder