[swift] 버튼 비활성화

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

button.enabled = NO;

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



답변

NOSwift 의 부울 값 은 false입니다.

button.isEnabled = false

해야합니다.

다음UIControlisEnabled속성에 대한 Swift 문서입니다 .


답변

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

// Swift 2
editButton.userInteractionEnabled = false

// Swift 3
editButton.isUserInteractionEnabled = false 

생각해 내다:

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

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


답변

이 작업을 수행하는 방법은 다음과 같습니다.

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

IBAction은 스토리 보드의 버튼에 연결됩니다.

버튼이 콘센트로 설정되어있는 경우 :

    @IBOutlet weak var myButton: UIButton!

그런 다음을 사용하여 활성화 된 속성에 액세스 할 수 있습니다. 버튼 이름에 표기 :

    myButton.enabled = false


답변

Swift 3에서 버튼 비활성화 :

yourButton.isEnabled = false


답변

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

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

yourButton.isEnabled = false 

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

yourButton.userInteractionEnabled = false

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

 yourButton.alpha = 0.0

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

 yourButton.removeFromSuperView()

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


답변

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

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

  • isEnabledUIControl (UIButton의 수퍼 클래스)의 속성 이며 활성화 / 비활성화의 시각 효과 (즉, 회색으로 표시됨) 가 있습니다.

  • isUserInteractionEnabled UIView (UIControl의 수퍼 클래스)의 속성이며 시각적 효과는 없지만 목적을 달성합니다.

사용법 :

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach


답변

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버튼을 누릅니다. 따라서 충돌 방지 .