2016-10-18 9 views
0

Я следил за tutorial здесь, чтобы создать контролируемый и понятный вид. Я просто хочу добавить границу границы, ширину границы и закругленную границу в UIView.Почему свойства, помеченные как @IBInspectable, не работают?

Мне удалось показать свойства. Но не имеет значения, что я установил на раскадровке, результат все равно, если их там нет. Нет границы, хотя я установил границу шириной 2 и черным цветом. Он не отображается как на раскадровке, так и во время выполнения. Я установил границу шириной 2, но во время выполнения я печатаю значение ширины границы в didViewLoad, а результат равен 0. Что может быть, возможно, неправильно?

@IBDesignable extension view: UIView { 

    @IBInspectable var cornerRadius: CGFloat { 
     get { 
      return layer.cornerRadius 
     } 
     set { 
      layer.cornerRadius = newValue 
      layer.masksToBounds = newValue > 0 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat { 
     get { 
      return layer.borderWidth; 
     } 
     set { 
      layer.borderWidth = borderWidth; 
     } 
    } 

    @IBInspectable var borderColor: UIColor? { 
     get { 
      return UIColor(CGColor: layer.borderColor!); 
     } 
     set { 
      layer.borderColor = borderColor?.CGColor 
     } 
    } 

} 

И это тоже не работает:

@IBDesignable class BOView: UIView { 

    @IBInspectable var cornerRadius: CGFloat { 
     get { 
      return layer.cornerRadius 
     } 
     set { 
      layer.cornerRadius = newValue 
      layer.masksToBounds = newValue > 0 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat { 
     get { 
      return layer.borderWidth; 
     } 
     set { 
      layer.borderWidth = borderWidth; 
     } 
    } 

    @IBInspectable var borderColor: UIColor? { 
     get { 
      return UIColor(CGColor: layer.borderColor!); 
     } 
     set { 
      layer.borderColor = borderColor?.CGColor 
     } 
    } 

} 
+0

ты перевернул меню '' Editor' ➜ Автоматически Refresh Views' на в IB? – holex

+0

@holex этот параметр уже включен. –

+0

см. Этот учебник: https://iosdevcenters.blogspot.com/2017/07/how-to-use-ibinspectable-in-swift-30.html –

ответ

4

Попробуйте использовать новое_значение вместо реальной стоимости.

Например,

@IBInspectable var borderWidth: CGFloat { 
    get { 
     return layer.borderWidth 
    } 
    set { 
     layer.borderWidth = newValue 
    } 
} 

Chen, я предпочитаю, как вы делаете это, но также отметить, что то, что вы пытаетесь сделать, это возможно из раскадровки непосредственно без использования IBDesignable. Вы можете установить свойства слоя в атрибутах User Defined Runtime Attributes.

enter image description here

+0

Вы проверили этот ответ перед публикацией? это работает? – holex

+0

@holex да я сделал, и он работает –

+0

Ooooooooh вот что это! Да, мне нужно использовать 'newValue' вместо имени переменной. Благодаря!!!! Но IBDesignable все еще не работает, хотя ... но это большой прыжок! –