如何将控制事件添加到 RxCocoa 中的自定义按钮?

Posted

技术标签:

【中文标题】如何将控制事件添加到 RxCocoa 中的自定义按钮?【英文标题】:How do I add a control event to a custom button in RxCocoa? 【发布时间】:2019-06-13 07:08:29 【问题描述】:

如何将 .tap 方法添加到自定义按钮,即。 <myCustomButton>.rx.tap 在 RxSwift/RxCocoa 中,这样我就可以将按钮的点击绑定到一个 observable。

CircularButton.swift

class UICircularButton: UIButton 
    override func layoutSubviews() 
        super.layoutSubviews()

        clipsToBounds = true
        subviews.first?.contentMode = .center

        let layer: CALayer = self.layer
        layer.cornerRadius = self.frame.size.width / 2
        layer.masksToBounds = true
    

ViewController.swift

let transferButton: UIActionButton = 
        let button = UICircularButton(type: .system)
        button.setBackgroundImage(#imageLiteral(resourceName: "transfer"), for: .normal)
        button.backgroundColor = Colors.trueGreen
        return UIActionButton(button: button, actionLabel: "Transfer")
    ()

// Question
func configureBinding() 
        // How do I do this
        transferButton.rx.tap
            .bind(to: ...)
            .dispose(by: ...)
    

【问题讨论】:

【参考方案1】:

您不需要定义它,它已经在UIButton 上定义并且您的自定义类会继承它。

【讨论】:

我做不到。我试过了,点击方法不存在。另外,我在自定义视图中创建 UICircularButton 并将其加载到我的 ViewController 中,但这不应该是原因吧? @SamuelKith 好像你找到了,顺便祝你好运【参考方案2】:

您可以像这样在 UIActionButton 声明中分配绑定

let transferButton: UIActionButton = 
    let button = UICircularButton(type: .system)
    button.setBackgroundImage(#imageLiteral(resourceName: "transfer"), for: .normal)
    button.backgroundColor = Colors.trueGreen
    button.rx.tap.bind 
        // My code or function call
    .disposed(by: self.disposeBag)
    return UIActionButton(button: button, actionLabel: "Transfer")
()

【讨论】:

【参考方案3】:

我发现了问题,这是我的错误,按钮嵌套在另一层中,由于命名不当,我错过了。

【讨论】:

以上是关于如何将控制事件添加到 RxCocoa 中的自定义按钮?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 以编程方式将我们应用程序的自定义 URI 添加到存储在日历中的事件中

如何将自定义事件添加到 jQuery 插件模式中

如何将自定义视图+控制器添加到模型?

如何将子视图添加到情节提要中的自定义 UITableViewCell

Flex 4中的自定义视频搜索栏控制[关闭]

如何将 UINavigationControllerDelegate 中的自定义过渡动画应用于特定的推送和弹出事件?