2016-05-31 6 views
1

Я хотел бы переместить код, чтобы настроить UIButtons из моих viewcontroller классов в качестве лучшей практики. Код, который у меня ниже, заключается в том, чтобы добавить белую рамку в UIButtons, и я хотел бы просто называть ее кнопками на протяжении всего моего проекта.Swift: UIButton Customization

//White Border 
    let passwordBorder = CALayer() 

    let width = CGFloat(5.0) 

    passwordBorder.borderColor = UIColor.whiteColor().CGColor 

    passwordBorder.frame = CGRect(x: 0, y: 0, width: passwordField.frame.size.width, height: passwordField.frame.size.height) 

    passwordBorder.borderWidth = width 

    passwordField.layer.addSublayer(passwordBorder) 

    passwordField.layer.masksToBounds = true 

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

Я новичок в кодировании, и у меня проблемы со вспомогательными функциями на что-либо UI. Благодаря!

+0

какой тип настройки вы хотите для кнопки –

+1

создайте функцию, которая возвращает кнопку с рамкой, поскольку вы хотите повторно использовать код –

+0

Вы можете посмотреть на этот ответ: http://stackoverflow.com/a/27645782/6080920 –

ответ

2

Посмотрите на расширения Swift. Вы можете довольно легко сделать что-то вроде

extension UIButton { 
     func setPasswordBorderColor(borderColor: UIColor) { 
     //White Border 
     let passwordBorder = CALayer() 

     let width = CGFloat(5.0) 

     passwordBorder.borderColor = borderColor.CGColor 

     passwordBorder.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height) 

     passwordBorder.borderWidth = width 

     self.layer.addSublayer(passwordBorder) 

     self.layer.masksToBounds = true 
    } 
} 
1
import UIKit 


// 
@IBDesignable 
class CustomBorderButton: UIButton { 

    @IBInspectable var cornerRadius: CGFloat = 0 { 
     didSet { 
      layer.cornerRadius = cornerRadius 
      layer.masksToBounds = cornerRadius > 0 
     } 
    } 
    @IBInspectable var borderWidth: CGFloat = 0 { 
     didSet { 
      layer.borderWidth = borderWidth 
     } 
    } 
    @IBInspectable var borderColor: UIColor? { 
     didSet { 
      layer.borderColor = borderColor?.CGColor 
     } 
    } 
} 
1

без кода вы можете настроить ваш кнопка

Выберите вашу кнопку, затем выберите Удостоверение инспектора затем добавьте

«User Defined время выполнения Атрибут» .Прибор экрана для более подробной информации

Объявление d CALayer + XibConfiguration.h & CALayer + XibConfiguration.m в вашем проекте

для CALayer + XibConfiguration Открыть link & скачать CALayer + XibConfiguration

enter image description here

1

Есть несколько способов, с помощью которых вы можете достичь этого например, с использованием категории, подкласса UIButton или создать функцию в классе (может быть базовым классом, унаследованным всеми другими классами.) и т. д.

Используя функцию, вы можете сделать

func cutomizeButton(frame : CGRect, title : String) -> UIButton { 

    let button : UIButton = UIButton(type: .Custom) 

    button.frame = frame 
    button.layer.borderWidth = 5.0 
    button.layer.borderColor = UIColor.whiteColor().CGColor; 
    button.layer.masksToBounds = true 

    button.titleLabel?.text = title; 

    //do other stuff 

    return button; 
} 
1

В хелперовой методе класса макияжа как

func customiseButton(button:UIButton){ 
     //White Border 
     let passwordBorder = CALayer() 

     let width = CGFloat(5.0) 

     passwordBorder.borderColor = UIColor.whiteColor().CGColor 

     passwordBorder.frame = CGRect(x: 0, y: 0, width: button.frame.size.width, height: button.frame.size.height) 

     passwordBorder.borderWidth = width 

     button.layer.addSublayer(passwordBorder) 

     button.layer.masksToBounds = true 
    } 

и ViewController называет этот метод как

HelperClass().customiseButton(passwordField) 
0

Вы можете попробовать с помощью этого расширения для круглой кнопки:

extension UIButton{ 
      func roundCorners(corners:UIRectCorner, radius: CGFloat){ 
        let borderLayer = CAShapeLayer() 
        borderLayer.frame = self.layer.bounds 
        borderLayer.strokeColor = UIColor.green.cgColor 
        borderLayer.fillColor = UIColor.clear.cgColor 
        borderLayer.lineWidth = 10.5 
        let path = UIBezierPath(roundedRect: self.bounds, 
          byRoundingCorners: corners, 
          cornerRadii: CGSize(width: radius, height: radius)) 
        borderLayer.path = path.cgPath 
        self.layer.addSublayer(borderLayer) 
    } 
}