Swift 中的响应者链(UIButton 目标中的 nil target)



我在 swift 中使用响应器链时遇到问题。

当我使用 nil 目标设置按钮目标时,如下所示:

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

该操作将向上发送响应程序链,直到在控制器中处理该操作。到目前为止一切顺利:-)

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

提前感谢任何帮助:-)

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

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

这将重新创建响应程序链,并将新消息中继到下一个响应程序。

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

我想

在关闭当前视图控制器后显示一个不同的视图控制器。这 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)
        }
    }
}

最新更新