2016-12-01 1 views
0

Все ярлыки в моем приложении используют шрифты с установленными значениями интервала/кернинга, а также цветами и несколькими другими вещами, и я хочу посмотреть, какая вещь выглядит в раскадровке со всеми этими атрибутами.Можно ли отобразить UILabel.attributedText в раскадровке, используя @IBDesignable?

Поскольку UILabel является UIView, я надеялся, что этого можно достичь, используя @IBDesignable. Но после некоторых экспериментов я не могу ничего сделать в раскадровке.

Это код:

@IBDesignable class CustomLabel: UILabel { 
    @IBDesignable override var text: String? { 
     didSet { 
      guard let text = text else { return } 
      let titleAttributes = [NSForegroundColorAttributeName: UIColor.green] 
      let titleString = NSMutableAttributedString(string: text, attributes: titleAttributes) 
      titleString.addAttribute(NSKernAttributeName, value: 5, range: NSRange(location: 0, length: text.characters.count)) 
      // Other attributes 
      self.attributedText = titleString 
     } 
    } 
} 

...

@IBOutlet weak var theTitle: CustomLabel! 
theTitle.text = "Some stuff" 

Но в раскадровке метка отображается без каких-либо приписываемых настройки строки применяются.

Кто-нибудь знает, будет ли то, что я пытаюсь сделать, и если да, то как заставить его работать?

+0

Здесь вы надеетесь, что получите ответ, который показывает, что вы можете. Хотелось бы, чтобы я мог использовать IB, чтобы показать ** истинное ** портретное отношение к пейзажному виду (классы размера не работают для iPad), но из-за ограничения, которое в основном говорит «вы не можете ** выполнить ** код в режиме« IB », Я закончил тем, что делал все (все больше и больше) в коде. В конце концов, мои взгляды в IB закончились пустым - зачем использовать его? Моя нижняя линия мысли? Вы используете «логический код», чтобы попытаться отобразиться в IB. Как вы можете ожидать, что IB («IBDesignable») выполнит его? – dfd

ответ

6

Swift 3

По Вашей ситуации использование @IBInspectable в переопределены текст вар из UILabel, Это позволит вам передать текст из инспекторе свойств (см скриншот), который будет быть вынесено на раскадровку

enter image description here

@IBDesignable class DGlabel: UILabel { 

@IBInspectable override var text: String? { 
    didSet { 
     decorate() 
    } 
} 

@IBInspectable var fontSize: CFloat = 15 { 
    didSet { 
     decorate() 
    } 
} 


@IBInspectable var fontColor: UIColor = UIColor.red { 
    didSet { 
     decorate() 
    } 
} 

/*** more inspectable var can be added **/ 

func decorate() { 

    guard let text = text else { return } 

    let titleAttributes = [ 
     NSFontAttributeName : UIFont.systemFont(ofSize: fontSize), 
     NSForegroundColorAttributeName : fontColor, 
     NSUnderlineStyleAttributeName : NSUnderlineStyle.styleSingle.rawValue 
     ] as [String : Any] 

    let titleString = NSMutableAttributedString(string: text, attributes: titleAttributes) 

    // Other attributes 
    titleString.addAttribute(NSKernAttributeName, value: 5, range: NSRange(location: 0, length: text.characters.count)) 

    self.attributedText = titleString 
    } 
} 
+0

Удивительный, именно то, что я искал. – Gruntcakes

+0

@Essenceofchicken Мое удовольствие :) – dip

+0

Знаете ли вы, если можно легко расширить его таким образом, чтобы содержимое украшения могло быть переменным, то есть для некоторых меток размер шрифта 15 или другие его 16, для других его 17 и поэтому один, иногда цвет красный, иногда белый и так далее? – Gruntcakes