버튼 비활성화


97

UIButton클릭 후 iOS 에서 버튼 ( ) 을 비활성화하고 싶습니다 . 저는 iOS 개발에 익숙하지 않지만 객관적인 코드는 C라고 생각합니다.

button.enabled = NO;

그러나 나는 그것을 신속하게 할 수 없었다.

답변:


207

NOSwift 의 부울 값 은 false입니다.

button.isEnabled = false

해야합니다.

다음 은 UIControl의 isEnabled속성에 대한 Swift 문서입니다 .


이니셜 라이저를 통해 또는 스토리 보드를 통해 버튼을 생성했는지 여부는 동일합니다.
— KerrM

나는 콘센트가 없을 때를 의미했습니다. 어쨌든 해결책은 버튼을 전역 적으로 정의하는 것입니다.
— Daniel Springer

44

버튼이 "눌려진"모양없이 정적으로 유지되도록하려면 다음을 수행하십시오.

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

생각해 내다:

1) 당신 IBOutlet은->@IBOutlet weak var editButton: UIButton!

2) 위의 코드가 들어갑니다 viewWillAppear


1
나는 이것이 내가 찾던 것과 정확히 일치한다고 생각했지만 이것은 AppKit이 아닌 UIKit으로 보입니다.
— 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에서 잘 작동합니다. 기본적으로 보낸 사람을 AnyObject 대신 Any로 설정했지만 둘 다 여전히 작동합니다 .... 어떤 오류가 발생합니까?
— Krivvenz

명확성을 위해 코드가 작동하려면 IBOutlet이 필요하다고 위의 답변에 명시해야합니다. IBOutlet이 필요한지 여부가 혼란 스러웠습니다. 분명히 필요합니다.

작동하는 데 필요하지 않습니다. IBAction에서 버튼을 입력하고 활성화 된 상태를 변경할 수 있습니다. 또는 IBOutlet으로 설정 한 경우 콘센트에서. 노트를 사용하여 수행 할 수 있습니다. 두 가지 방법 모두 작동합니다.
— Krivvenz

다른 기능에서 버튼을 비활성화하려면 IBOutlet이 필요하다고 생각합니다.


5

Google에서 '버튼을 사용 중지'했지만 더 미묘한 사용 사례가있는 경우 :

시각 효과로 비활성화 : 다른 사람들이 말했듯이 이렇게하면 버튼이 눌러지지 않고 시스템이 자동으로 비활성화 된 것처럼 보입니다.

yourButton.isEnabled = false 

시각 효과없이 비활성화 : 버튼이 정상적으로 보이지만 터치에 반응하여 좋아하는 버튼으로 작동하지 않는 경우 버튼을 사용하고 있습니까? 이 시도!

yourButton.userInteractionEnabled = false

비활성화하지 않고 숨기기 : 이 접근 방식은 비활성화하지 않고 버튼을 숨 깁니다 (보이지 않지만 여전히 탭할 수 있음).

 yourButton.alpha = 0.0

제거 : 보기를 완전히 제거합니다.

 yourButton.removeFromSuperView()

버튼 뒤에있는 항목 누르기 : 두 개의 버튼이 쌓여 있고 상단 버튼이 일시적으로없는 것처럼 작동하도록 하시겠습니까? 상단 버튼이 다시 필요하지 않으면 제거하십시오. 다시 필요하면 높이 또는 너비를 0으로 축소하십시오!


1

isEnabled또는 isUserInteractionEnabled속성을 사용하여 버튼을 활성화 / 비활성화 할 수 있습니다 .

둘의 차이점은 다음과 같습니다.

  • isEnabledUIControl (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이와 같이 segue에 대해 설정된 버튼 이 @IBAction func nextLevel(_ sender: UIButton) {} 있고 앱 내에서 다른 작업이 발생 한다고 가정 해 보겠습니다 (예 : 타이머, 게임 플레이 등). segue 버튼을 비활성화하는 대신 다른 작업이 계속 발생하고 앱 충돌없이 해당 segue를 사용할 수있는 옵션을 사용자에게 제공 할 수 있습니다 . 방법은 다음과 같습니다.

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'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.