【问题标题】:How do I access UIButtons in extensions?如何访问扩展中的 UIButtons?
【发布时间】:2020-07-10 20:39:54
【问题描述】:

我是 swift 新手,请多多包涵。

我正在尝试在主 ViewController 类之外的扩展中启用一个按钮。基本上,我只希望用户的蓝牙天线打开并工作时按钮工作。它看起来像这样:

extension UIViewController: CBCentralManagerDelegate {

        //function called after manager is initialized, state of bluetooth on manager
        public func centralManagerDidUpdateState(_ central: 
CBCentralManager) {
            switch central.state {
                  case .unknown:
                    print("central.state is .unknown")
                  case .resetting:
                    print("central.state is .resetting")
                  case .unsupported:
                    print("central.state is .unsupported")
                  case .unauthorized:
                    print("central.state is .unauthorized")
                  case .poweredOff:
                    print("central.state is .poweredOff")
                  case .poweredOn:
                    print("central.state is .poweredOn")
                    connectButton.isEnabled = true
               
                  @unknown default:
                    print("central.state is .unknown")
            }
        
        }
}

如您所见,在 .poweredOn 情况下,我尝试启用我的按钮。但是,我不断收到“使用未解决的标识符”错误。这是我声明按钮的方式:

class ViewController: UIViewController {


    @IBOutlet var voltageOut: UILabel!
    @IBOutlet public var connectButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        connectButton.isEnabled = false
        //initializing manager
        myVars.centralManager = CBCentralManager(delegate: self, queue: nil)
    }


    @IBAction func connectButton(_ sender: Any) {
        connect()
    }
}

我已经在谷歌上搜索了几个小时,我尝试让类打开/公开,当我在类之外声明我的按钮时,我在覆盖函数中通过“connectButton.isEnabled = false”得到一个不同的错误。如何在主 ViewController 类之外访问我的按钮?

【问题讨论】:

    标签: ios swift button compiler-errors


    【解决方案1】:

    您正在扩展基类 UIViewController,而不是扩展您的子类 ViewController。基类对您在子类中声明的属性一无所知。

    改变

    extension UIViewController: CBCentralManagerDelegate {
    

    extension ViewController: CBCentralManagerDelegate {
    

    【讨论】:

      【解决方案2】:

      您需要为 vc 名称添加扩展名,而不是一般的 UIViewController,因为它实际上对 connectButton 一无所知

      extension ViewController: CBCentralManagerDelegate {
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        相关资源
        最近更新 更多