Можете ли вы изменить состояние кнопки IBAction за пределами ее закрытия?- Swift 4 - PullRequest
0 голосов
/ 05 февраля 2019

Это определенно НЕ дубликат Отключить кнопку .Я прошел через это несколько раз безуспешно.На самом деле, я не помню, чтобы вообще видел sender.enabled.Я нашел этот код на форуме разработчиков Apple.

Можете ли вы ссылаться на кнопку IBAction по аргументу отправителя и изменять ее состояние в других местах вашего кода?Изменение состояния кнопки в закрытии IBAction выглядит следующим образом: sender.enabled = false ИЛИ sender.enabled = true Но я пытаюсь изменить ее состояние из другой функции.

Я знаю, что можно изменить состояние кнопки IBOutlet из другой функции, например:

@IBOutlet weak var myButton: UIButton!  
// then elsewhere in your code, within a method implementation:  
myButton.enabled = false   

Но что-то подобное возможно с IBAction кнопка.

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Да, вы можете изменить status свойство, когда хотите ..

    @IBOutlet var BtnOne:UIButton!
    @IBOutlet var BtnTwo:UIButton!

    @IBAction func btnOnePressed (_ sender: Any) {
        print("BtnOne is disabled") 
        BtnOne.isEnabled = false // or true
        //you can call any func
        btnTwoPressed()
    }

    @IBAction func btnTwoPressed (_ sender: Any) {
        print("BtnOne is enabled")
        BtnOne.isEnabled = true
    }
0 голосов
/ 19 февраля 2019

Вы немного озадачены тем, что означает @IBAction.

Это способ связать действие в раскадровке - обычно .touchUpInside для UIButton - с функцией в вашем коде.Параметр sender становится нажатой кнопкой.

Этот код, например:

@IBAction func buttonTapped(_ sender: UIButton) {
     // code here
}

может быть назначен как действие .touchUpInside для многихразные кнопки в вашем контроллере.Подумайте о наборе кнопок с номерами от 1 до 10. Подключите каждую кнопку к этому @IBAction и:

@IBAction func buttonTapped(_ sender: UIButton) {
     print("You tapped the button labeled: \(sender.currentTitle)")
}

Если у вас есть ссылка на объект кнопки, вы можете получитьназначенное ему действие (назначенное с помощью кода или раскадровки @IBAction) с помощью метода actions(forTarget:forControlEvent:), но это довольно сложно и, вероятно, не подходит.

В качестве примера, хотя ... Предполагая, что у вас естьПо вашему мнению, кнопка, которая подключена к @IBAction, показанному выше, вы можете сделать:

override func viewDidLoad() {
    super.viewDidLoad()

    for v in view.subviews {
        if let b = v as? UIButton,
            let a = b.actions(forTarget: self, forControlEvent: .touchUpInside) {
            if a.contains("buttonTapped:") {
                print("Found button with buttonTapped: IBAction \(b)")
            }
        }
    }
}

Вам будет намного проще подключить свои кнопки к @IBOutlet с (или к @IBOutlet Collection. Если ваш код действительно пытается найти кнопку (или кнопки), подключенную к @IBAction, вы, вероятно, захотите пересмотреть дизайн кода.

0 голосов
/ 05 февраля 2019

Да.Это возможноВы можете отправить объект UIButton другой функции для достижения этой цели.

@IBAction func buttonAction(_ sender: UIButton) {
     self.receiveEvent(sender: sender)
}

func receiveEvent(sender:UIButton) {
     sender.isEnabled = false
}

Надеюсь, это поможет.

...