Swift - 生成各种控件的工厂类(包含标签,按钮,输入框等)

在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.

    }

}

时间: 2024-07-28 20:12:19

Swift - 生成各种控件的工厂类(包含标签,按钮,输入框等)的相关文章

背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) 通过处理 Pointer 相关事件实现一个简单的涂鸦板 InkCanvas 基础知识 示例1.演示如何通过 Pointer 相关事件的处理,来实现一个简单的涂鸦板Controls/MediaControl/InkSimple.xaml <Page x:Class="Windows10.Controls.MediaControl.InkSimple" xmlns="http://s

背水一战 Windows 10 (42) - 控件(导航类): Frame 动画

原文:背水一战 Windows 10 (42) - 控件(导航类): Frame 动画 [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) Frame 动画 示例Animation/NavigationTransitionInfo/Demo.xaml <Page x:Class="Windows10.Animation.NavigationTransitionInfo.Demo" xmlns="http://schemas.mic

重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 文本类控件的增强 为一些控件增加了 Header 属性和 HeaderTemplate 属性 为一些控件增加了 PlaceholderText 属性 示例1.演示

iOS控件之UIResponder类

iOS控件之UIResponder类 在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,我们知道UIApplication.UIView.UIViewController这几个类是直接继承自UIResponder,UIWindow是直接继承自UIView的一个特殊的View,所以这些类都可以响应事件.当然我们自定义的继承自UIView的View以及自定义的继承自UIViewController的控制器都可以响应事件.iOS里面通常将这些能响应事件的对象称之为响应者. iO

C#控件系列--文本类控件

C#控件系列--文本类控件 文本类控件主要包括Label.LinkLabel.Button.TextBox以及RichTextBox. Label 功能 Label用来显示用户不能直接改变的文本信息. 属性 Image--指定标签上显示的图像. Text--此属性是与文件相关联的文本. Name--标识对象的名称. AutoSize--如果此属性为true,则启用了根据字号自动调整大小.请注意,这只对文本不换行的标签控件有效. Enabled--是否启用该控件. Visible--可见还是隐藏.

MFC串口的编程 mscomm控件与SerialPort类

MFC制作上位机,首先需要了解的是串口的编程,一般有两种方法,一个是使用ActiveX控件,例如mscomm串口控件,还有一个是用SerialPort类或者一些其他的串口类,这两个的区别是使用SerialPort类不需要注册控件,在其他没有安装控件的电脑上也能够用. 一·使用mscomm串口控件 使用mscomm串口控件的方法网上一大堆,大致说一些方法和一些需要注意的地方.如果是使用VC6.0在WIN7上来编写就会有个问题会通常说添加控件的方法为选中项目à“工程”à“添加到工程”à“Compon

C#控件系列--选择类控件

C#控件系列--选择类控件 选择类控件主要包括:ComboBox.CheckBox.CheckedListBox.RadioButton.NumericUpDown以及ListBox. ComboBox 功能 ComboBox控件用于在下拉组合框中显示数据,它结合了TextBox控件和ListBox控件的功能. 属性

背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

原文:背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) AppBar CommandBar 示例1.AppBar 的示例Controls/NavigationControl/AppBarDemo.xaml <Page x:Class="Windows10.Controls.NavigationControl.AppBarDemo" xml

背水一战 Windows 10 (41) - 控件(导航类): Frame

原文:背水一战 Windows 10 (41) - 控件(导航类): Frame [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) Frame 示例Controls/NavigationControl/FrameDemo.xaml <Page x:Class="Windows10.Controls.NavigationControl.FrameDemo" xmlns="http://schemas.microsoft.com/w