swift 动态加载控件

2017-07-25 11:23:15 wang6177 阅读数 623

懒加载控件刚开始只展示一个tableview的;


 // 懒加载tableview
    lazy var table : UITableView = self.tableView()
    func tableView() -> UITableView {
        self.table = UITableView(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height), style: UITableViewStyle.grouped);
        self.table.delegate = self;
        self.table.dataSource = self;
        
        return table;
    }

调用:

        self.view.addSubview(self.table);


2018-06-25 23:01:13 sunxiaoju 阅读数 1533

1、纯swift创建控件需要在ViewController.swift中创建,如下代码所示:

class ViewController: UIViewController {
    var label: UILabel!// 声明一个标签对象
    var textField: UITextField!//声明一个文本框对象
    override func viewDidLoad() {
        super.viewDidLoad()
        label = UILabel.init(frame: CGRect(x:50,y:50, width:100,height:30))//创建标签,并设置位置,宽度、高度
        label.text = "Test"//设置标签文字
        label.textColor = UIColor.red//设置标签字体颜色
        self.view.addSubview(label)//将标签添加到View中
        
        textField=UITextField.init(frame: CGRect(x:150,y:50, width:100,height:30))//创建文本框,并设置位置,宽度、高度
        textField.text=""//默认内容为空
        textField.borderStyle=UITextBorderStyle.roundedRect//设置文本框的边框样式
        self.view.addSubview(textField)////将标签添加到View中
        
        let btn:UIButton=UIButton.init(frame: CGRect(x:50,y:100, width:100,height:30))//创建按钮,并设置位置,宽度、高度
        btn.setTitle("Post", for: UIControlState.normal)//设置按钮上的文字
        btn.setTitleColor(UIColor.black, for: UIControlState.normal)//设置按钮上文字的颜色
        btn.addTarget(self, action:#selector(btnClick(_:)), for: UIControlEvents.touchDown)//为按钮添加touchDown事件(按下)
        self.view.addSubview(btn)//将标签添加到View中
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @objc func btnClick(_ sender: UIButton) {//按钮相应事件方法,注意在该方法前需要加@objc
        let text=textField.text
        label.text=text
    }
}

2、在看一下面板中是没有任何控件的,如下图所示:


3、输入文本框,然后点击Post按钮,运行结果如下:


2017-01-03 15:34:31 hjp1137 阅读数 753

遇到个需求,视图底部有个设置栏,要求浮在阅读内容的上方,解决方法很简单,代码如下所示:

self.view.bringSubview(toFront: self.testview)

testview 就是浮出的设置栏,可以是各种子控件

2015-09-23 11:27:39 baixiaozhe 阅读数 1285

原帖:http://www.hangge.com/blog/cache/detail_727.html

在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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import UIKit
 
class MyTableViewControllerUITableViewController {
     
    @IBOutlet weak var dueDateLabel: UILabel!
     
    //日期选择器显示状态
    var datePickerVisible:Bool false
 
    override func viewDidLoad() {
        super.viewDidLoad()
       
        self.title = "添加任务"
        //去除尾部多余的空行
        self.tableView.tableFooterView = UIView(frame:CGRectZero)
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
     
    //选择cell的row之后
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
        
        //当执行到日期选择器上一行的时候,可以判断是否要显示日期选择器了
        if indexPath.section == 0 && indexPath.row == 1{
            if !datePickerVisible{
                self.showDatePicker()
            }else{
                self.hideDatePicker()
            }
        }
         
        println(indexPath.row)
    }
     
    //显示日期选择器
    func showDatePicker(){
        //日期选择器的状态设为打开
        datePickerVisible = true
         
        let indexPathDatePicker = NSIndexPath(forRow: 2, inSection: 0)
        self.tableView.insertRowsAtIndexPaths([indexPathDatePicker],
            withRowAnimation: UITableViewRowAnimation.Automatic)
         
    }
     
    //隐藏日期选择器
    func hideDatePicker(){
        if datePickerVisible {
            //日期选择器的状态设为关闭
            datePickerVisible = false
            let indexPathDatePicker = NSIndexPath(forRow: 2, inSection: 0)
            self.tableView.deleteRowsAtIndexPaths([indexPathDatePicker],
                withRowAnimation: UITableViewRowAnimation.Fade)
        }
    }
 
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
     
    //设置cell
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell {
        //因为日期选择器的位置在日期显示Label下面。它的位置就是第2个section  和第3个row
        if indexPath.section == 0 && indexPath.row == 2{
            //用重用的方式获取标识为DatePickerCell的cell
            var cell = tableView.dequeueReusableCellWithIdentifier("DatePickerCell")
                as UITableViewCell?
            //如果没找到就创建一个
            if cell == nil {
                //创建一个标识为DatePickerCell的cell
                cell = UITableViewCell(style: UITableViewCellStyle.Default,
                    reuseIdentifier: "DatePickerCell")
                //设置cell的样式
                cell?.selectionStyle = UITableViewCellSelectionStyle.None
                //创建日期选择器
                var datePicker = UIDatePicker(frame: CGRectMake(0.0, 0.0, 320.0, 216.0))
                //给日期选择器的tag
                datePicker.tag = 100
                //将日期选择器区域设置为中文,则选择器日期显示为中文
                datePicker.locale = NSLocale(localeIdentifier: "zh_CN")
                //将日期选择器加入cell
                cell?.contentView.addSubview(datePicker)
                //注意:action里面的方法名后面需要加个冒号“:”
                datePicker.addTarget(self, action: "dateChanged:",
                    forControlEvents: UIControlEvents.ValueChanged)
            }
            return cell!
        }else{
            return super.tableView(tableView, cellForRowAtIndexPath: indexPath)
        }
    }
     
    //日期选择器响应方法
    func dateChanged(datePicker : UIDatePicker){
        //更新提醒时间文本框
        let formatter = NSDateFormatter()
        //日期样式
        formatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
        self.dueDateLabel.text = formatter.stringFromDate(datePicker.date)
    }
 
    //根据日期选择器的隐藏与否决定返回的row的数量
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         
        if section == 0  && datePickerVisible{
            return 3
        }else{
            return super.tableView(tableView, numberOfRowsInSection: section)
             
        }
    }
 
    //因为日期选择器插入后会引起cell高度的变化,所以要重新设置
    override func tableView(tableView: UITableView,
        heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        //当渲染到达日期选择器所在的cell的时候将cell的高度设为217
        if indexPath.section == 0 && indexPath.row == 2{
            return 216.0
        }else{
            return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
        }
    }
 
    //当覆盖了静态的cell数据源方法时需要提供一个代理方法。
    //因为数据源对新加进来的日期选择器的cell一无所知,所以要使用这个代理方法
    override func tableView(tableView: UITableView,
        indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int {
        if indexPath.section == 0 && indexPath.row == 2{
            //当执行到日期选择器所在的indexPath就创建一个indexPath然后强插
            let newIndexPath = NSIndexPath(forRow: 0, inSection: indexPath.section)
            return super.tableView(tableView, indentationLevelForRowAtIndexPath: newIndexPath)
        }else{
            return super.tableView(tableView, indentationLevelForRowAtIndexPath: indexPath)
        }
    }
}

2015-08-17 17:26:10 helegehehe 阅读数 285
    //创建按钮
    UIButton * btn = [[UIButton alloc]init];
    btn.backgroundColor = [UIColor redColor];

    

    //设置按钮在页面的位置

    btn.frame = CGRectMake(100, 100, 100, 100);
    
    //设置正常状态下的图片
    UIImage * image = [UIImage imageNamed:@“image_01"];

    [btn setBackgroundImage: image forState:UIControlStateNormal];


    //设置正常状态下的文字及其颜色
    [btn setTitle:@“呵呵” forState:UIControlStateNormal];

    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];


    
    //设置长按状态下的图片
    UIImage * image2 = [UIImage imageNamed:@“image_02"];

    [btn setBackgroundImage: image2 forState:UIControlStateHighlighted];


    //设置长按状态下的文字及其颜色
    [btn setTitle:@“呵呵哒” forState:UIControlStateHighlighted];

    [btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];


    
    //将按钮添加到页面
    [self.view addSubview:btn];

swift:懒加载控件

阅读数 399

30个Swift UI控件

阅读数 546