以前はUIButton
インスタンスの場合、setTitle
またはsetImage
のUIControlState.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ペアです)
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.Normal
はUIControlState.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: [])
_.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
_は以前と同様に機能します。
Appleは、Xcodeベータの最新バージョンで通常の制御状態に戻しました。最新のXcodeベータ版にアップグレードし、.normal
を使用してください。
Swift 5
から交換
btn.setTitle("title", for: .Normal)
に
btn.setTitle("title", for: UIControl.State.normal)