Отключить кнопку


97

Я хочу отключить кнопку ( UIButton) на iOS после ее нажатия. Я новичок в разработке для iOS, но я думаю, что эквивалентный код для цели - C следующий:

button.enabled = NO;

Но я не мог сделать это быстро.

Ответы:


207

Логическое значение для NOSwift равно false.

button.isEnabled = false

должен это сделать.

Вот это документация Swift для UIControl«S isEnabledсобственности.


То же самое независимо от того, создали ли вы кнопку с помощью инициализатора или с помощью раскадровки.
KerrM

Я имел в виду, когда у меня нет выхода. В любом случае решение состоит в том, чтобы определить кнопку глобально.
Дэниел Спрингер

44

Если вы хотите, чтобы кнопка оставалась неподвижной без появления «нажатой»:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

Помните:

1) Ваш IBOutlet->@IBOutlet weak var editButton: UIButton!

2) Код выше входит в viewWillAppear


1
Я думал, что это именно то, что я искал, но, похоже, это только UIKit, а не AppKit.
drootang

12

Я делаю это следующим образом:

@IBAction func pressButton(sender: AnyObject) {
    var disableMyButton = sender as? UIButton
    disableMyButton.enabled = false
}

IBAction связан с вашей кнопкой в ​​раскадровке.

Если ваша кнопка настроена как розетка:

    @IBOutlet weak var myButton: UIButton!

Затем вы можете получить доступ к включенным свойствам с помощью. обозначение в названии кнопки:

    myButton.enabled = false

У меня отлично работает в Swift 4. Я заметил, что по умолчанию он устанавливает отправителя на Any вместо AnyObject, но оба по-прежнему работают .... Какую ошибку вы получаете?
Кривенц 05

Для ясности, возможно, вам следует указать в своем ответе выше, что IBOutlet требуется для работы вашего кода. Меня смутило, нужен был IBOutlet или нет. Понятно, что это необходимо.

Для работы не требуется. Вы можете ввести кнопку приведения в действие в IBAction и изменить включенный статус или, если вы настроили его как IBOutlet, вы можете сделать это с помощью .notation на выходе. Оба способа работают.
Кривенц 07

Я действительно считаю, что IBOutlet необходим, если вы хотите отключить кнопку из другой функции.


5

Для тех, кто погуглил "отключить кнопку", но может иметь более тонкие варианты использования:

Отключить с визуальным эффектом: как говорили другие, это предотвратит нажатие кнопки, и система автоматически сделает ее отключенной:

yourButton.isEnabled = false 

Отключить без визуального эффекта: вы используете кнопку в том случае, когда она должна выглядеть нормально, но не реагировать на прикосновения? Попробуй это!

yourButton.userInteractionEnabled = false

Скрыть без отключения: этот подход скрывает кнопку, не отключая ее (невидима, но ее все еще можно нажать):

 yourButton.alpha = 0.0

Удалить: это полностью удалит представление:

 yourButton.removeFromSuperView()

Нажмите что-нибудь за кнопкой: две кнопки сложены друг с другом, и вы хотите, чтобы верхняя кнопка временно действовала так, как будто ее там нет? Если вам снова не понадобится верхняя кнопка, удалите ее. Если он вам снова понадобится, попробуйте уменьшить его высоту или ширину до 0!


1

Вы можете включить / отключить кнопку с помощью свойства isEnabledили isUserInteractionEnabled.

Разница между двумя:

  • isEnabledявляется свойством UIControl (суперкласс UIButton) и имеет визуальные эффекты (т. е. выделены серым цветом) включения / выключения

  • isUserInteractionEnabled является свойством UIView (суперкласс UIControl) и не имеет визуального эффекта, но достигает цели

Использование :

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

Вы знаете, почему я получаю эту ошибку? Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Я также получаю сообщение об ошибке, если меняю (_ sender: )на UIButton. Ошибка гласит:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

Скажем, в Swift 4 у вас есть кнопка, настроенная для перехода, как IBActionэто, @IBAction func nextLevel(_ sender: UIButton) {} и у вас есть другие действия, происходящие в вашем приложении (например, таймер, gamePlay и т. Д.). Вместо того, чтобы отключать кнопку перехода, вы можете дать своему пользователю возможность использовать этот переход, пока другие действия все еще выполняются, и БЕЗ СБОЯ ПРИЛОЖЕНИЯ . Вот как:

var appMode = 0

@IBAction func mySegue(_ sender: UIButton) {

    if appMode == 1 {  // avoid crash if button pressed during other app actions and/or conditions
        let conflictingAction = sender as UIButton
        conflictingAction.isEnabled = false
    }
}

Обратите внимание, что у вас, вероятно, будут другие условия внутри if appMode == 0и / или if appMode == 1которые все еще будут возникать и НЕ будут конфликтовать с mySegueкнопкой. Таким образом, ИЗБЕЖАНИЕ АВАРИИ .


0

Отключить кнопку в Swift 4 можно с помощью кода

@IBAction func yourButtonMethodname(sender: UIButon) {
 yourButton.isEnabled = false 
}

Если вы попробуете свой код, должна произойти эта ошибка:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

Я думаю ты имеешь в виду yourButton(sender: UIButton). Ваш обновленный код, скорее всего, вызовет следующую ошибку:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.