ボタンを無効にする


95

UIButtonクリックした後、iOSのボタン()を無効にしたいのですが。私はiOS用に開発するのは初めてですが、目的の同等のコード-Cはこれだと思います:

button.enabled = NO;

しかし、私はそれを迅速に行うことができませんでした。

回答:


205

NOSwift ののブール値はfalseです。

button.isEnabled = false

それを行う必要があります。

UIControlisEnabledプロパティに関するSwiftのドキュメントを以下に示します。


イニシャライザとストーリーボードのどちらでボタンを作成した場合でも同じです。
KerrM 2018年

コンセントがないときのことです。とにかく解決策は、ボタンをグローバルに定義することです。
ダニエルスプリンガー

43

「押された」外観なしでボタンを静止させたい場合:

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

覚えておいてください:

1)あなたIBOutletは->@IBOutlet weak var editButton: UIButton!

2)上記のコードが入ります viewWillAppear


1
これはまさに私が探していたものだと思いましたが、これはAppKitではなくUIKitだけのようです。
drootang 16

11

これを行う方法は次のとおりです。

@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として設定している場合は、アウトレットの.notationを使用して実行できます。どちらの方法でも機能します。
Krivvenz

別の機能からボタンを無効にする場合は、IBOutletが必要だと思います。


5

Googleが「ボタンを無効にする」が、微妙な使用例がある可能性がある場合:

視覚効果で無効にする:他の人が言ったように、これはボタンが押されるのを防ぎ、システムは自動的にそれを無効に見えるようにします:

yourButton.isEnabled = false 

視覚効果なしで無効にする:ボタンは正常に見えるはずですが、タッチに反応してボタンのように動作しない場合にボタンを使用していますか?これを試して!

yourButton.userInteractionEnabled = false

無効化せずに非表示にする:この方法では、無効化せずにボタンを非表示にします(非表示になりますが、タップは可能です)。

 yourButton.alpha = 0.0

削除:ビューを完全に削除します:

 yourButton.removeFromSuperView()

ボタンの後ろにあるものをタップする: 2つのボタンを重ねて、上部のボタンが一時的にそれがないように動作させたいですか?トップボタンが不要になった場合は、削除してください。再び必要になる場合は、高さまたは幅を0に圧縮してみてください。


1

isEnabledまたはisUserInteractionEnabledプロパティを使用してボタンを有効/無効にできます。

2つの違いは次のとおりです。

  • 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このようなボタンが設定されていて@IBAction func nextLevel(_ sender: UIButton) {} 、アプリ内で他のアクション(タイマー、ゲームプレイなど)が発生しているとします。セグエボタンを無効にするのではなく、他のアクションがまだ発生しているときにアプリをクラッシュせずにセグエを使用するオプションをユーザーに提供することができます。方法は次のとおりです。

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 == 0if 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.