didMoveToSuperview方法认识和使用

由来:

今天给项目添加新功能——点击弹出阳历,阴历日期选择。

弹出日期选择是弹出的控制器,里面的日期选择控件是封装的View,View使用Xib画的,

遇到的问题是:控制器传数据给View,在awakeFromNib里面进行DatePicker设置去数据是nil。

解决办法:

1.直接在didSet方法配置datePicker:

 var defaultBirthday: String? {
        didSet {
            let dformatter = DateFormatter()
            dformatter.dateFormat = "yyyy-MM-dd"
            datePicker.datePickerMode = .date
            //将日期选择器区域设置为中文,则选择器日期显示为中文
            datePicker.locale = Locale(identifier: "zh_CN")
            datePicker.maximumDate = Date()
            // 时区
            let GMTzone = NSTimeZone.init(forSecondsFromGMT: 0)
            dformatter.timeZone = GMTzone as TimeZone!
            
            // 当前日期
            let date = Date()
            let strNowTime = dformatter.string(from: date) as String
            var firstDate: Date = dformatter.date(from: strNowTime)!
            
            if (defaultBirthday?.length != 0) {
                firstDate = dformatter.date(from: defaultBirthday!)!
            }
            let dateString: String  = dformatter.string(from: firstDate) as String
            firstDate = dformatter.date(from: dateString)!
            
            // 设置默认时间
            datePicker.setDate(firstDate, animated: true)
            datePicker.addTarget(self, action: #selector(dateChanged),
                                 for: .valueChanged)
        }
    }

2.在didMoveToSuperview方法设置datePicker数据即可:

override func didMoveToSuperview() {
        super.didMoveToSuperview()
    }

总结:

1.didMoveToSuperview方法官方解释如下:

 Tells the view that its superview changed.

 大致意思: 当view的父级视图更改的时候会调用此方法。

The default implementation of this method does nothing. Subclasses can override it to perform additional actions whenever the superview changes.

大致意思:此方法默认实现,不做任何操作。子视图可以实现此方法,添加自己所需要的功能

通过以上我们可以理解为 此方法在view被添加新的父级视图的时候会调用。

现在是不是明白为什么在awakeFromNib取值是nil,在didMoveToSuperview就可以取到值了。

 

2.String转Date的时候会造成时区问题差8个小时,解决方法如下:

 

            //将日期选择器区域设置为中文,则选择器日期显示为中文
            datePicker.locale = Locale(identifier: "zh_CN")
            datePicker.maximumDate = Date()
            // 时区
            let GMTzone = NSTimeZone.init(forSecondsFromGMT: 0)
            dformatter.timeZone = GMTzone as TimeZone!
            

 

3.系统的UIDatePicker控件不滚动控件是取不到当前日期值的,这个依产品需求吧,可以使用datePicker.date属性直接取当前日期即可。

 

暂时记录这么多,后续会遇到问题,解决问题,记录问题哟?

 

转载于:https://www.cnblogs.com/pengsi/p/8721307.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值