工廠設計模式封裝UI控件設計模式
2.1擴展label。框架
1)cmd + n—>新建一個Swift File—>將導入的框架改成 import UIKit字體
2)寫一個擴展extension—>寫一個類方法 class func 必定要有返回值 能夠傳參數spa
extension UILabel {
class func labelWith(text: String, fontSize: CGFloat, textColor: UIColor)-> UILabel {
let l = UILabel()
l.text = text
l.textColor = textColor設計
l.font = UIFont.systemFontOfSize(fontSize)orm
l.textAlignment = .Center
l.numberOfLines = 0
//自適應大小
l.sizeToFit()
return l
}圖片
}ip
再懶加載建立label時的代碼:cmd
private lazy var tipLabel: UILabel = UILabel.labelWith("", fontSize: 14, textColor: UIColor.darkGrayColor())it
2.2擴展Button。 cmd+shift+f 「搜索"
import UIKit
extension UIButton {
//第一種按鈕樣式:背景視圖+文字
class func buttonWithTitle(backgroundImage: String,title: String, titleColor: UIColor,fontSize: CGFloat) -> UIButton {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: backgroundImage), forState:.Normal)
btn.setTitle(title, forState: .Normal)
btn.setTitleColor(titleColor, forState: .Normal)
//設置按鈕中文字的字體。
btn.titleLabel?.font = UIFont.systemFontOfSize(fontSize)
btn.sizeToFit()
return btn
}
//第二種按鈕樣式:圖片+背景視圖
class func buttonWithImage(imageName: String,backgroundImageName: String) -> UIButton {
let btn = UIButton()
btn.setImage(UIImage(named: imageName), forState: .Normal)
btn.setImage(UIImage(named: imageName + "_highlighted"), forState: .Highlighted)
btn.setBackgroundImage(UIImage(named: backgroundImageName), forState: .Normal)
btn.setBackgroundImage(UIImage(named: backgroundImageName + "_highlighted"), forState: .Highlighted)
return btn
}
}
3.抽象工廠設計模式 類簇(NSNumber,NSString, NSArray,NSDictionary):NSNumber 類 就是 使用抽象工廠設計模式來實現。
import UIKit
//抽象類
//全部的UI控件,都是經過這個類來進行實例化
//NSNumber 類 就是 使用抽象工廠設計模式來實現
class UIFactory {
//抽象方法
class func labelFactory(text: String, fontSize: CGFloat, textColor: UIColor)-> UILabel {
let l = UILabel.labelWith(text, fontSize: fontSize, textColor: textColor)
return l
}
//第一種按鈕樣式:背景視圖+文字
class func buttonWithTitle(backgroundImage: String,title: String, titleColor: UIColor,fontSize: CGFloat) -> UIButton {
let btn = UIButton.buttonWithTitle(backgroundImage, title: title, titleColor: titleColor, fontSize: fontSize)
return btn
}
//第二種按鈕樣式:圖片+背景視圖
class func buttonWithImage(imageName: String,backgroundImageName: String) -> UIButton {
let btn = UIButton.buttonWithImage(imageName, backgroundImageName: backgroundImageName)
return btn
}
}