Как мне получить доступ к UIButtons в расширениях? - PullRequest
1 голос
/ 10 июля 2020

Я новичок в Swift, пожалуйста, подождите.

Я пытаюсь включить кнопку в расширении за пределами основного класса ViewController. По сути, я хочу, чтобы кнопка работала, только если антенна Bluetooth пользователя включена и работает. Это выглядит так:

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

Я гуглил часами, я пытался сделать класс открытым / publi c, и когда я объявляю свою кнопку вне класса, я получаю другая ошибка "connectButton.isEnabled = false" в функции переопределения. Что я могу сделать, чтобы получить доступ к моей кнопке за пределами основного класса ViewController?

Ответы [ 2 ]

3 голосов
/ 10 июля 2020

Вы расширяете базовый класс UIViewController вместо расширения вашего подкласса ViewController. Базовый класс ничего не знает о свойствах, которые вы объявляете в своем подклассе.

Замените

extension UIViewController: CBCentralManagerDelegate {

на

extension ViewController: CBCentralManagerDelegate {
1 голос
/ 10 июля 2020

Вам нужно сделать расширение для v c name, а не для generi c UIViewController, который на самом деле ничего не знает о connectButton

extension ViewController: CBCentralManagerDelegate {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...