4

我在快速使用响应者链时遇到了问题。

当我使用 nil 目标设置按钮目标时,例如:

someButton.addTarget(nil, action:"addButtonTapped:", forControlEvents: .TouchUpInside)

该动作将向上发送到响应者链,直到该动作在控制器中被处理。到目前为止,一切都很好 :-)

但我想拦截动作,执行一些代码并将其传递给控制器​​。但我找不到快速做到这一点的方法。在 ObjC 中,这项任务很容易完成,所以我想也应该有一种快速的方法。

提前感谢您的帮助:-)

4

2 回答 2

4

我的一位同事提示我重新创建选择器并再次手动发送。

let selector = Selector("someButtonTapped:")
let target: AnyObject? = self.nextResponder()?.targetForAction(selector, withSender: button)
UIApplication.sharedApplication().sendAction(selector, to: target, from: self, forEvent: nil)

这将重新创建响应者链并将新消息中继给下一个响应者。

我希望有人会发现这很有用。

于 2015-04-23T07:22:37.403 回答
0

我想在关闭当前视图控制器后显示一个不同的视图控制器。MyContainerViewController容器视图控制器具有打开不同视图控制器的功能。 在关闭当前视图控制器后使用响应者链呈现不同的视图控制器避免了必须保留引用或强制转换父视图控制器。这在使用大量嵌套的子视图控制器和容器视图控制器时特别方便。

class SomeChildViewController: UIViewController {
    @IBAction func closeAndShowSomething(sender: Any?) {}
        let showSelector = #selector(MyContainerViewController.showSomething(_:))
        let viewController: Any? = next?.target(forAction: showSelector, withSender: nil)
        dismiss(animated: true) {
            UIApplication.shared.sendAction(showSelector, to: viewController, from: self, for: nil)
        }
    }
}
于 2016-12-06T17:36:30.367 回答