Установить IBInspectable программно

Я хотел бы установить различные элементы IBInspectable на основе информации из Интернета, которую я получаю. Например, у меня есть IBInspectables для зеленых, красных и оранжевых кругов. Если в запросе указано «зеленый», я бы хотел установить для isGreen inspectable значение «Да», а для других — «нет». То же самое касается двух других. Вы можете увидеть IBInspectables здесь. Я знаю, что могу сделать это с помощью кода, который я туда вставил, но есть ли способ программно переключать их?


person Dragos Strugar    schedule 03.12.2016    source источник


Ответы (2)


Любой IBInspectable — это просто свойство, закодированное для просмотра в IB. Итак, если у вас есть это:

@IBInspectable var isGreen:Bool? {
    didSet {
        // code to color circle?
    }
}

Ты можешь это сделать:

self.isGreen = true
person dfd    schedule 03.12.2016
comment
Итак, в моем ViewController я должен добавить @IBInspectable isGreen, а в viewWillAppear что мне написать? - person Dragos Strugar; 03.12.2016
comment
Где я должен определить, какие из них вызывать, и как их вызвать? - person Dragos Strugar; 03.12.2016
comment
Я неправильно понял ваш вопрос. Вероятно, вы могли бы провести рефакторинг, так как свойства IBInspectable уже знают тип UIColor. [ссылка] nshipster.com/ibinspectable-ibdesignable показывает хороший пример этого. - person dfd; 03.12.2016
comment
Ага. Спасибо. Очень хороший ресурс. Решил мою проблему. Вы должны ввести весь код, который изменяет пользовательский интерфейс в didSet {} - person Dragos Strugar; 03.12.2016

Ты кажешься растерянным. Термин IBInspectable описывает свойство объекта представления с тегом @IBInspectable. Это сообщает Interface Builder, что вы хотите иметь возможность изменять это свойство изнутри Interface Builder.

Помимо того, что свойство IBInspectable редактируется из Interface Builder, оно ничем не отличается от любого другого свойства.

Если у вас есть класс CircleView со свойством диаметра:

class FooView: UIView {
  @IBInspectable var diameter: CGFloat {
    didSet {
      //Code to do something with a change to the diameter property
    }
}

И в вашем контроллере представления есть объект FooView с выходом, тогда вы можете изменить значение своего пользовательского свойства в коде, как и любое другое свойство:

class MyViewController: UIViewController {

  @IBOulet weak var fooView: FooView!

  @IBAction func buttonTapped(sender: UIButton) {
    fooView.diameter += 5
  }
}
person Duncan C    schedule 03.12.2016