繁体   English   中英

如何访问扩展中的 UIButtons?

[英]How do I access UIButtons in extensions?

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

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

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()
    }
}

我已经搜索了几个小时,我尝试让 class 开放/公开,当我在 class 之外声明我的按钮时,我在覆盖 ZC1C425268E6785D1AB61DZ 中通过“connectButton.isEnabled = false”得到另一个错误。 如何访问主 ViewController class 之外的按钮?

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

改变

extension UIViewController: CBCentralManagerDelegate {

extension ViewController: CBCentralManagerDelegate {

您需要为 vc 名称而不是通用UIViewController进行扩展,因为它实际上对connectButton

extension ViewController: CBCentralManagerDelegate {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM