【问题标题】:iOS 15 UIButton configuration - how to write a closure for configuration handleriOS 15 UIButton 配置 - 如何为配置处理程序编写闭包
【发布时间】:2022-01-20 01:35:50
【问题描述】:

按照教程,我正在使用新的 UIButtons 和 iOS 15。

    let btn = UIButton(frame:CGRect(x: 25, y:0 , width: 250, height: 50))
    btn.config.title = "Connect"
    btn.updateConfiguration()
    btn.configurationUpdateHandler = { button in
      var config = btn.configuration
        switch button.state {
        case .highlighted:
            config?.showsActivityIndicator = true
            config?.imagePadding = 5
            self.role = self.nameInput.text?.lowercased()
            UserDefaults.standard.set(self.role, forKey: "role")
            SFSConn.shared.connect()
        default:
            config?.showsActivityIndicator = false
        }
      btn.configuration = config
    }
    btnForm.addSubview(btn)

如何将闭包推断为独立闭包? 我想将多个按钮连接到同一个闭包。 提前致谢。

【问题讨论】:

    标签: ios swift ios15


    【解决方案1】:

    configurationUpdateHandler 属性是UIButton.ConfigurationUpdateHandler? 类型,它只是(UIButton) -> Void 的类型别名,它是一个带有UIButton 单个参数的闭包。因此,只需创建它。

    let handler: (UIButton) -> Void = { (button) in
        // do something
    }
    
    btn.configurationUpdateHandler = handler
    

    【讨论】:

    • 谢谢。在处理程序中,它说我不能使用 self.role。我需要通过它[弱自我]?
    • @dreadbot 如果你想在对象的实例属性中使用self,该属性必须是惰性的(这只是意味着它实际上不会在第一次访问之前被初始化),因为对象必须在self 可用之前初始化自身,并且初始化自身的一部分需要初始化其所有属性。您可以看到这将如何创建无限循环。因此,只需使用语法 lazy var handler 而不是 let handler 将其声明为惰性属性。
    • @dreadbot 你仍然可以在闭包的捕获列表中使用[weak self] (button) in 使self 变弱,除了使闭包本身变得惰性之外。请记住,弱自我是为了防止保留循环。例如,如果self(即视图控制器)在此闭包中的一些异步工作完成之前永远是nil,那么肯定声明自己是弱的。
    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2021-11-25
    相关资源
    最近更新 更多