Включение и отключение кнопок в xcode - PullRequest
0 голосов
/ 27 мая 2020

Для данного простого аудиоприложения с несколькими кнопками:

enter image description here

Ссылки на кнопки внутри ViewController:

@IBOutlet weak var recordAudioButton: UIButton!
@IBOutlet weak var playAudioButton: UIButton!
@IBOutlet weak var processAudioButton: UIButton!

Но где эти названия кнопок и ссылки внутри xcode gui? Обратите внимание, что кнопка Allow Recording выделена: но не упоминается recordAudioButton как имя кнопки:

enter image description here

Я хочу изменить включение / отключение logi c другой кнопки, на которую еще нет ссылки .. но не видно, как / где это сделать. В диалоговом окне не отображается способ просмотра / изменения ссылок на кнопки. Так где же это сделать?

Ответы [ 3 ]

1 голос
/ 27 мая 2020

См. В разделе «Ссылки на розетки» для каждой кнопки.

Вы можете отключить после настройки кнопок

@IBOutlet weak var recordAudioButton: UIButton! {
    didSet { recordAudioButton.isEnabled = false }
}
@IBOutlet weak var playAudioButton: UIButton! {
    didSet { playAudioButton.isEnabled = false }
}
@IBOutlet weak var processAudioButton: UIButton! {
    didSet { processAudioButton.isEnabled = false }
}

Затем в viewDidLoad проверьте на разрешение

AVAudioSession.sharedInstance().requestRecordPermission() { [unowned self] allowed in
    DispatchQueue.main.async {                         
        self.recordAudioButton.isEnabled = allowed
        self.playAudioButton.isEnabled = allowed
        self.processAudioButton.isEnabled = allowed
    }
}

Тогда ваш код

@IBAction func askForPermissions() {
    recordingSession = AVAudioSession.sharedInstance()

    do {
        try recordingSession.setCategory(.playAndRecord, mode: .default)
        try recordingSession.setActive(true)
        recordingSession.requestRecordPermission() { [unowned self] allowed in
            // UI related work has to be executed on main thread(queue)
            DispatchQueue.main.async {                         
                self.recordAudioButton.isEnabled = allowed
                self.playAudioButton.isEnabled = allowed
                self.processAudioButton.isEnabled = allowed
            }
        }
    } catch let error {
        presentError(withMessage: error.localizedDescription)
    }
}
1 голос
/ 27 мая 2020

Вы только что определили button как outlet. Таким образом, он не отображается в Touch Up Inside, он отображается в области торговых точек. Но вы подключаете свой other button к action function, этот button появляется на Touch Up Inside.

0 голосов
/ 27 мая 2020

Учитывая отправную точку / подсказку от @Picode, вот чего мне не хватало, чтобы получить новую ссылку UIButton. Статья Medium помогла проложить путь https://medium.com/@GanChau / output-vs-action-connections-in-xcode-b5331fb233a1 . В частности, нам нужно иметь как Editor, так и Visual Designer, показывающие:

enter image description here

Итак, теперь мой проект Я щелкнул новую кнопку Run DSP, удерживая клавишу Control, и появилось контекстное меню:

enter image description here

Теперь выберите New Referencing Outlet и подключите его к ViewController код:

enter image description here

Я набрал dspJsButton для Name, и мы получили следующий код:

     @IBOutlet weak var dspJsButton: UIButton!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...