Reputation: 42449
Previously for UIButton
instances, you were able to pass in UIControlState.Normal
for setTitle
or setImage
. .Normal
is no longer available, what should I use instead?
let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
btn.setTitle("title", for: .Normal) // does not compile
(This is a canonical Q&A pair to prevent the flood of duplicate questions related to this UIButton
and UIControl
changes with iOS 10 and Swift 3)
Upvotes: 14
Views: 12422
Reputation: 9220
Swift 5
Replace from
btn.setTitle("title", for: .Normal)
to
btn.setTitle("title", for: UIControl.State.normal)
Upvotes: 1
Reputation: 42449
Swift 3 update:
It appears that Xcode 8/Swift 3 brought UIControlState.normal
back:
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
has been renamed to UIControlState.normal
and removed from the iOS SDK. For "Normal" options, use an empty array to construct an empty option set.
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: [])
Upvotes: 23
Reputation: 196
Apple brought back the normal control state in more recent versions of Xcode beta. Upgrade to the most recent Xcode beta and use .normal
.
Upvotes: 2
Reputation: 579
The .Normal
is removed(iOS 10 DP1), you can use the []
or UIControlState(rawValue: UInt(0))
to replace the .Normal
, if you don't want to change codes all around(in case apple add it again or you don't like the []
), you can just add once this code
extension UIControlState {
public static var Normal: UIControlState { return [] }
}
or
extension UIControlState {
public static var Normal: UIControlState { return UIControlState(rawValue: UInt(0)) }
}
then all the .Normal
work like before.
Upvotes: 1