zoukankan      html  css  js  c++  java
  • 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, 60, height: 30)
            self.view.addSubview(labelNum)
             
            let labelDm = ViewFactory.createLabel("维度:")
            labelDm.frame = CGRect(x: 20, y: 200, 60, height: 30)
            self.view.addSubview(labelDm)
             
            //创建文本输入框
            txtNum = ViewFactory.createTextField("", action:Selector("numChanged"), sender:self)
            txtNum.frame = CGRect(x:80,y:100,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, 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.
        }
    }
  • 相关阅读:
    webService基本概念、元素及简单编码实现
    云服务器、vps、虚拟主机的区别
    SOAP和WSDL的一些必要知识
    密码学基础
    oracle执行计划
    dubbo学习笔记:快速搭建
    dubbo和zookeeper的关系
    查看wifi密码
    自动保存图表
    自定义颜色
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4838393.html
Copyright © 2011-2022 走看看