在iOS开发中,页面里有时会大量的用到一些控件,如果要一个个单独创建再设置样式的话就显得很麻烦。我们可以创建一个生成各种控件的工厂类,这样在需要的时候调用下就可以了。
下面以一个自定义的工厂类为例,其中提供了文本标签,按钮,文本输入框,分段单选控件的生成,效果图如下:
工厂类:ViewFactory.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
import UIKit
class ViewFactory
{ /**
* 控件默认尺寸
*/
class func getDefaultFrame() -> CGRect
{
let defaultFrame = CGRectMake (0, 0, 100, 30)
return defaultFrame
}
class func createControl(type: String , title:[ String ], action: Selector , sender: AnyObject ) -> UIView
{
switch (type)
{
case "label" :
return ViewFactory .createLabel(title[0])
case "button" :
return ViewFactory .createButton(title[0], action: action,
sender: sender as UIViewController )
case "text" :
return ViewFactory .createTextField(title[0], action: action,
sender: sender as UITextFieldDelegate )
case "segment" :
return ViewFactory .createSegment(title, action: action, sender:
sender as UIViewController )
default :
return ViewFactory .createLabel(title[0])
}
}
/**
* 创建按钮控件
*/
class func createButton(title: String , action: Selector , sender: UIViewController )-> UIButton
{
var button = UIButton (frame: ViewFactory .getDefaultFrame())
button.backgroundColor = UIColor .orangeColor()
button.setTitle(title, forState:. Normal )
button.titleLabel!.textColor = UIColor .whiteColor()
button.titleLabel!.font = UIFont .systemFontOfSize(14)
button.addTarget(sender, action:action, forControlEvents: UIControlEvents . TouchUpInside )
return button
}
/**
* 创建文本输入框控件
*/
class func createTextField(value: String , action: Selector , sender: UITextFieldDelegate )
-> UITextField
{
var textField = UITextField (frame: ViewFactory .getDefaultFrame())
textField.backgroundColor = UIColor .clearColor()
textField.textColor = UIColor .blackColor()
textField.text = value
textField.borderStyle = UITextBorderStyle . RoundedRect
textField.adjustsFontSizeToFitWidth = true
textField.delegate = sender
return textField
}
/**
* 创建分段单选控件
*/
class func createSegment(items: [ String ], action: Selector , sender: UIViewController )
-> UISegmentedControl
{
var segment = UISegmentedControl (items:items)
segment.frame = ViewFactory .getDefaultFrame()
//segment.segmentedControlStyle = UISegmentedControlStyle.Bordered
segment.momentary = false
segment.addTarget(sender, action:action, forControlEvents: UIControlEvents . ValueChanged )
return segment
}
/**
* 创建文本标签控件
*/
class func createLabel(title: String ) -> UILabel
{
let label = UILabel ()
label.textColor = UIColor .blackColor();
label.backgroundColor = UIColor .whiteColor();
label.text = title;
label.frame = ViewFactory .getDefaultFrame()
label.font = UIFont (name: "HelveticaNeue-Bold" , size: 16)
return label
}
} |
工厂类的使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import UIKit
class ViewController : UIViewController , UITextFieldDelegate {
var txtNum: UITextField !
var segDimension: UISegmentedControl !
var btn: UIButton !
override func viewDidLoad() {
super .viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
setupControls()
}
func setupControls()
{
//创建文本标签
let labelNum = ViewFactory .createLabel( "阈值:" )
labelNum.frame = CGRect (x: 20, y: 100, width: 60, height: 30)
self .view.addSubview(labelNum)
let labelDm = ViewFactory .createLabel( "维度:" )
labelDm.frame = CGRect (x: 20, y: 200, width: 60, height: 30)
self .view.addSubview(labelDm)
//创建文本输入框
txtNum = ViewFactory .createTextField( "" , action: Selector ( "numChanged" ), sender: self )
txtNum.frame = CGRect (x:80,y:100,width:200,height:30)
txtNum.returnKeyType = UIReturnKeyType . Done
self .view.addSubview(txtNum)
//创建分段单选控件
segDimension = ViewFactory .createSegment([ "3x3" , "4x4" , "5x5" ], action: "dimensionChanged:" ,
sender: self )
segDimension.frame = CGRect (x:80,y: 200,width: 200,height: 30)
self .view.addSubview(segDimension)
segDimension.selectedSegmentIndex = 1
//创建按钮控件
btn = ViewFactory .createButton( "确定" , action: nil , sender: self )
btn.frame.origin = CGPointMake (80, 300)
self .view.addSubview(btn)
}
override func didReceiveMemoryWarning() {
super .didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
} |