视图中的委托协议、数据源协议与高级视图

本文探讨了视图中的委托协议和数据源协议,尤其是如何在复杂的视图如选择器和集合视图中使用它们。高级视图的功能通过遵守特定的委托和数据源协议实现,例如UITextField和UITextView的委托协议,以及UIPickerView、UICollectionView和UITableView的数据源协议。文中重点关注了选择器和集合视图的使用,并提到了UICollectionViewFlowLayout的流式布局管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图中的委托协议、数据源协议与高级视图

一些高级视图的功能比较复杂,我们需要将这些复杂功能从视图本身剥离开来,由另外一些类完成。当然,这些类需要遵守视图指定的协议。

  • 相对简单的视图——只指定了委托协议,包括UITextField和UITextView,对应的委托协议命名规则是**“视图名+Delegate”**
  • 对于一些比较复杂的视图,我们同时制定委托协议数据源协议,这些视图在iOS中不是很多,其中主要有选择器(UIPickerView)、集合视图(UICollectionView)和表视图(UItableView)对应的数据源协议命名规则是视图名+DataSourse)

在软件领域,有句话很经典:“有输入的地方,就要验证”

1.选择器

import UIKit

class ViewController: UIViewController{
    
    var datePicker:UIDatePicker!
    var label:UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let screen = UIScreen.main.bounds
        self.view.backgroundColor = .clear
        
        //添加日期选择器
        let datePickerWidth:CGFloat = 320
        let datePickerHeight:CGFloat = 167
        self.datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: datePickerWidth, height: datePickerHeight))
        //设置简体中文
        self.datePicker.locale = NSLocale(localeIdentifier: "zh-Hans") as Locale
       //设置日期时间格式
        self.datePicker.datePickerMode = .dateAndTime
        self.view.addSubview(datePicker)
        
        //添加标签
        let labelHeight:CGFloat = 200
        let labelWidth:CGFloat = 21
        let labelTopView:CGFloat = 281
        self.label = UILabel(frame: CGRect(x: (screen.size.width - labelWidth)/2, y: labelTopView, width: labelWidth, height: labelHeight))
        self.label.text = "请选择日期:"
        self.label.textAlignment = .center
        self.label.textColor = .white
        self.view.addSubview(self.label)
        
        //添加button按钮
        let button = UIButton(type: .system)
        let buttonHeight:CGFloat = 46
        let buttonWidth:CGFloat = 30
        let buttonTopView:CGFloat = 379
        button.frame = CGRect(x: (screen.size.width - buttonWidth)/2, y: buttonTopView, width: buttonWidth, height: buttonHeight)
        button.setTitle("选择", for: UIControl.State())
        button.addTarget(self, action: #selector(onClick(_:)), for: .touchUpInside)
        self.view.addSubview(button)
    }
    @objc func onClick(_ sender:AnyObject){
        let theDate:NSDate = self.datePicker.date as NSDate 
        //该属性返回选择的时间
        let desc = theDate.description(with: NSLocale.current)
        //该属性返回本地化的日期信息
        NSLog("the date picked is:%@", desc)//日志信息
        let dateFormatter:DateFormatter = DateFormatter()
        dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss"
        NSLog("the date formate is :%@", dateFormatter.string(from: theDate as Date))//日志信息
        self.label.text = dateFormatter.string(from: theDate as Date)
        
    }

}

2.集合视图

UICollecltionViewFlowLayout是一种流式布局管理器,从左到右从上到下布局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值