setTitle(_ title: String?, для состояния: UIControlState) где находится .Нормальное состояние?

Я обновляю свое приложение до Swift 3 с iOS10 на Xcode 8 и получаю сообщение об ошибке:

Btn.setTitle('str', forState: .Normal)

.Normal больше не является типом перечисления UIControlState. Какой тип UIControlState следует использовать для этого состояния?

Перечисление Apple теперь определяется как

public struct UIControlState : OptionSet {

   public init(rawValue: UInt)


   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 
}

person Edgar Georgel    schedule 19.06.2016    source источник
comment
Вы пробовали преобразовать в последний синтаксис Swift в Xcode? Это должно решить вашу проблему автоматически.   -  person Martin R    schedule 19.06.2016


Ответы (1)


Как и любой другой набор опций:

button.setTitle("", for: [])

где [] означает .normal (значение .normal равно 0).

Обратите внимание, что мы можем использовать несколько состояний в одном вызове:

button.setTitle("", for: [.selected, .disabled])

Вот почему UIControlState был изменен на набор опций.

person Sulthan    schedule 19.06.2016
comment
@ Dershowitz123 Я решил использовать более новый синтаксис, хотя я не большой поклонник for: вместо forState:. - person Sulthan; 19.06.2016
comment
Да, твой ответ правильный! Я просто хотел, чтобы он знал, что это можно сделать и таким образом. - person Dershowitz123; 19.06.2016
comment
@ Dershowitz123 На самом деле мой ответ был неправильным. Вы должны использовать [] для .normal. UIControlState.Normal больше не доступен в Swift 3. - person Sulthan; 19.06.2016
comment
Вы можете использовать .нормальный - person Joe Ginley; 24.07.2018
comment
@JoeGinley Да, теперь я могу это использовать. Это было невозможно еще в Swift 3, поэтому этот вопрос возник в первую очередь. - person Sulthan; 24.07.2018
comment
@Sulthan Он доступен с Swift 3, посмотрите здесь: stackoverflow.com /questions/37800342/ Если только они не продолжали менять его в Swift 3 из бета-версии Xcode или что-то в этом роде, возможно, я не понимал. - person Joe Ginley; 26.07.2018
comment
@JoeGinley Не могу вспомнить, какая это была версия :) В какой-то версии отсутствовала опция .normal. - person Sulthan; 26.07.2018