web-dev-qa-db-ja.com

UIControlState.Normalは使用できません

以前はUIButtonインスタンスの場合、setTitleまたはsetImageUIControlState.Normalを渡すことができました。 .Normalは使用できなくなりました。代わりに何を使用すればよいですか?

let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
btn.setTitle("title", for: .Normal) // does not compile

(これは、iOS 10およびSwift 3)でのこのUIButtonおよびUIControlの変更に関連する重複した質問のフラッドを防ぐための正規のQ&Aペアです)

13
JAL

Swift 3アップデート:

Xcode 8/Swift 3がUIControlState.normalを取り戻したようです:

public struct UIControlState : OptionSet {

    public init(rawValue: UInt)


    public static var normal: UIControlState { get }

    public static var highlighted: UIControlState { get } // used when UIControl isHighlighted is set

    public static var disabled: UIControlState { get }

    public static var selected: UIControlState { get } // flag usable by app (see below)

    @available(iOS 9.0, *)
    public static var focused: UIControlState { get } // Applicable only when the screen supports focus

    public static var application: UIControlState { get } // additional flags available for application use

    public static var reserved: UIControlState { get } // flags reserved for internal framework use
}

UIControlState.NormalUIControlState.normalに名前が変更され、iOS SDKから削除されました。 「通常」オプションの場合は、空の配列を使用して空のオプションセットを作成します。

let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 20, height: 20))

// Does not work
btn.setTitle("title", for: .Normal) // 'Normal' has been renamed to 'normal'
btn.setTitle("title", for: .normal) // 'normal' is unavailable: use [] to construct an empty option set

// Works
btn.setTitle("title", for: [])
22
JAL

_.Normal_が削除されました(iOS 10 DP1)。すべてのコードを変更したくない場合は、_[]_またはUIControlState(rawValue: UInt(0))を使用して_.Normal_を置き換えることができます。周り(Appleもう一度追加する場合、または_[]_が気に入らない場合)、このコードを一度追加するだけで済みます

_extension UIControlState {
    public static var Normal: UIControlState { return [] }
}
_

または

_extension UIControlState {
    public static var Normal: UIControlState { return UIControlState(rawValue: UInt(0)) }
}
_

その後、すべての_.Normal_は以前と同様に機能します。

2
Galvin

Appleは、Xcodeベータの最新バージョンで通常の制御状態に戻しました。最新のXcodeベータ版にアップグレードし、.normalを使用してください。

2
ThePringle

Swift 5

から交換

btn.setTitle("title", for: .Normal)

btn.setTitle("title", for: UIControl.State.normal)
0
Jerry Chong