2015-11-19 3 views
0

У меня есть UIButton, который наследуется от пользовательского класса ColorButton.Обновить свойство кнопки из пользовательского класса

@IBDesignable 
class ColorButton: UIButton { 

    @IBInspectable 
    var buttonColor: UIColor? 


    override func drawRect(rect: CGRect) { 

     let path = UIBezierPath(ovalInRect: rect) 
     buttonColor?.setFill() 
     path.fill() 
    } 

} 

Я могу сначала установить цвет кнопки, но когда я пытаюсь изменить его, используя следующий метод, ничего не меняется.

myButton.buttonColor = UIColor.blueColor() 

Я считаю, что я только что обновил собственность, но мне нужно перерисовывать кнопку, чтобы увидеть новый цвет. Я не знаю, как это сделать.

+0

Я думаю, вы должны переопределить buttonColor свойство в классе ColorButton, а также. – msmq

ответ

1

Теперь у вас есть только свойство, которое ничего не делает, когда вы его устанавливаете. Вам нужно установить backgroundColor parrent свойства класса (это свойство UIButton в вашем случае), чтобы решить эту проблему:

@IBDesignable 
class ColorButton: UIButton { 

    @IBInspectable 
    var buttonColor: UIColor? { 
     get { 
      return self.buttonColor 
     } 
     set { 
      self.backgroundColor = newValue 
     } 
    } 
} 

Но в вашем примере вам не нужно создавать собственный класс для него. Вы можете позвонить backgroundColor из обычного объекта UIButton, если у вас есть только эта функция.

+0

да ваше право. Я только что закончил использование backgroundColor обычного класса UIButton и рисовал круг, используя это. теперь он корректно обновляется. Спасибо за вашу помощь!! – ultraflex

0

Я копирую ваш код и использую его в своей демонстрации. Он работал хорошо, когда я изменить «buttonColor» в IB.So, кажется, когда вы измените «buttonColor» в коде, вы должны перерисуйте кнопку:

var buttonColor: UIColor?{ 
    didSet{ 
     setNeedsDisplay() 
    } 
} 
Смежные вопросы