2015-07-09 3 views
1

Я хотел бы создать кнопку, как это:Instantiate пользовательские кнопки из кода и раскадровки - как сделать метод инициализации

import UIKit 

class EKLikeButton: UIButton { 

    required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    self.layer.cornerRadius = 5.0; 
    self.layer.borderColor = UIColor.redColor().CGColor 
    self.layer.borderWidth = 1.5 
    self.backgroundColor = UIColor.blueColor() 
    self.tintColor = UIColor.whiteColor() 

    } 
} 

, но единственный способ сделать это, кажется, установить уже существующие в Раскадке. Я хотел бы быть в состоянии сделать:

let btn = EKLikeButton() 
btn.frame=CGRectMake(10.0, 10.0, 40.0, 40.0) 

, но когда я пытаюсь выше, я получаю

Отсутствует аргумент для параметра «Кодер» в вызове

Как бы я создать функцию init, которая может обрабатывать как код, так и раскадровку в Swift?

ответ

7

Это то, что я обычно делаю

class EKLikeButton: UIButton { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setUp() 

    } 
    init(){ 
     super.init(frame: CGRectZero) 
     setUp() 
    } 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setUp() 
    } 
    func setUp(){ 
     self.layer.cornerRadius = 5.0; 
     self.layer.borderColor = UIColor.redColor().CGColor 
     self.layer.borderWidth = 1.5 
     self.backgroundColor = UIColor.blueColor() 
     self.tintColor = UIColor.whiteColor() 
    } 
} 
+0

ТНХ - ш орки хорошо – timpone

1

Это сообщение об ошибке сообщает вам, что оно ищет параметр coder, потому что у вас есть только одна функция init. Вы не объявили инициализатор без параметров, так что вы не можете инициализировать как: EKLikeButton()

Чтобы добавить инициализации, который принимает параметр кадра, необходимо также реализовать:

override init(frame: CGRect) { 
    super.init(frame: frame) 
    // set up your frame, init, whatever 
} 

Тогда вы можете инстанцирует это так:

let btn = EKLikeButton(CGRect(10, 10, 40, 40))