버튼 비활성화


97

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

button.enabled = NO;

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

답변:


207

NOSwift 의 부울 값 은 false입니다.

button.isEnabled = false

해야합니다.

다음UIControlisEnabled속성에 대한 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.