2016-04-21 1 views
2

У меня есть этот пользовательский класс для кнопки.Угловой радиус не отображается на кнопке в раскадровке с помощью @ IBDesigable/@ IBInspectable

import UIKit 

@IBDesignable 
class CustomButton: UIButton { 

    @IBInspectable var cornerRadiusValue: CGFloat = 10.0 { 
     didSet { 
      setUpView() 
     } 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.layer.cornerRadius = 10.0 
    } 

    override func awakeFromNib() { 
     setUpView() 
    } 

    override func prepareForInterfaceBuilder() { 
     super.prepareForInterfaceBuilder() 
     setUpView() 
    } 

    func setUpView() { 
     self.layer.cornerRadius = 10.0 
    } 

} 

Но угловой радиус не отображается на кнопке в раскадровке.

Я понимаю, что @IBInspectable позволяет вам изменить значение на панели инспектора. Наверное, это не то, что я ищу.

Я хотел бы, чтобы угловой радиус просто показывался в раскадровке, когда я создаю кнопку с этим классом. Который я думал, что это делает @IBDesignable.

+1

Не знаю, если он будет решать, но вы не обрезая слой в его пределы, которые вы, вероятно, нужно сделать для того, чтобы показать, по крайней мере во время выполнения. Не уверен в раскадровке – pbush25

+0

Добавил это и не исправил то, что я хотел. Однако, спасибо. – KotaBear233

+0

Проблема заключается в том, что ваш код сбой в IB, поэтому способность к работе не работает. Я предоставил версию вашего кода, которая не разбивается, поэтому она работает так, как ожидалось. – matt

ответ

7

Ваш код сбой в IB, поэтому способность к работе не срабатывает. Здесь гораздо проще код, который работает:

@IBDesignable 
class CustomButton: UIButton { 
    @IBInspectable var cornerRadiusValue: CGFloat = 10.0 { 
     didSet { 
      setUpView() 
     } 
    } 
    override func awakeFromNib() { 
     super.awakeFromNib() 
     setUpView() 
    } 
    override func prepareForInterfaceBuilder() { 
     super.prepareForInterfaceBuilder() 
     setUpView() 
    } 
    func setUpView() { 
     self.layer.cornerRadius = self.cornerRadiusValue 
     self.clipsToBounds = true 
    } 
} 

Теперь кнопка является одновременно проверяющейся и проектируемым:

enter image description here

И он также работает в рабочем приложении.

+0

Можете ли вы указать, как мой ответ был неправильным? как вы сказали: «Вы на самом деле пытались это сделать? Разве это по углам в раскадровке?» –

+0

было очень полезно, что вы вызываете 'setUpView()' on didSet, а не на init класса. который решил трюк. Благодарю. – Jad

1

Попробуйте это:

@IBDesignable 
class CustomButton: UIButton { 

    @IBInspectable var cornerRadius: CGFloat = 0 { 
     didSet { 
      layer.cornerRadius = cornerRadius 
     } 
    } 

} 
Смежные вопросы