文档章节

swift实现自定义datePicker,只查询年份和月份

媛美一生
 媛美一生
发布于 2016/06/08 17:09
字数 566
阅读 27
收藏 0

//

//  SDDatePickerView.swift

//  OA

//

//  Created by HelloMac on 16/6/2.

//  Copyright © 2016年 HelloMac. All rights reserved.

//

import UIKit

class SDDatePickerView: UIPickerView,UIPickerViewDelegate,UIPickerViewDataSource {

    var todayIndexPath:NSIndexPath?

    var months:NSArray?

    var years:NSArray?

    var bigRowCount = 1000

    var minYear = 2008

    var maxYear = 2030

    var rowHeight = 44

    var componentNumber:Int = 2

    var MONTH:Int = 0

    var YEAR:Int = 1

    var LABEL_TAG:Int = 43

    //var numberOfComponents: Int

    override func awakeFromNib() {

        super.awakeFromNib()

        self.months = self.nameOfMonths()

        self.years = self.nameOfYears()

        self.todayIndexPath = self.todayPath()

        //设置代理

        self.delegate = self

        self.dataSource = self

        self.selectToday()

    }

    func date() -> NSDate {

        let monthCount:Int = (self.months?.count)!

        let month = self.months?.objectAtIndex((self.selectedRowInComponent(MONTH)) % monthCount) as! String

        let yearCount:Int = (self.years?.count)!

        let year = self.years?.objectAtIndex((self.selectedRowInComponent(YEAR)) % yearCount) as! String

        let str = "\(year)-\(month)"

        let formatter = NSDateFormatter()

        formatter.dateFormat = "yyyy-MMMM"

        let date = formatter.dateFromString(str)

        return date!

    }

    /**

        创建年和月的数据源

     */

    func nameOfMonths() -> NSArray {

        let dateFormatter = NSDateFormatter()

        return dateFormatter.standaloneMonthSymbols

    }

    func nameOfYears() -> NSArray {

        let years = NSMutableArray()

        for year in self.minYear..<self.maxYear {

            let yeatStr = "\(year)"

            years.addObject(yeatStr)

        }

        return years

    }

    /**

        代理方法

    */

    func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {

        return self.componentWidth()

    }

    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {

        var selected:Bool = false

        if component == MONTH{

            let monthCount:Int = (self.months?.count)!

            let monthName:String = self.months?.objectAtIndex(row % monthCount) as! String

            let currentMonthName:String = self.currentMonthName()

            if monthName == currentMonthName {

                selected = true

            }

        }else{

            let yearCount:Int = (self.years?.count)!

            let yearName:String = self.years?.objectAtIndex(row % yearCount) as! String

            let currentYearName:String = self.currentYearName()

            if yearName == currentYearName {

                selected = true

            }

        }

        var returnView:UILabel?

        if view?.tag == LABEL_TAG {

            returnView = view as? UILabel

        }else{

            returnView = self.labelForComponent(component, Selected: selected)

        }

        returnView?.textColor = selected ? UIColor.blueColor() : UIColor.blackColor()

        returnView?.text = self.titleForRow(row, forComponent: component)

        return returnView!

    }

    func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {

        return (CGFloat)(rowHeight)

    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

        return componentNumber

    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        if component == MONTH {

            return self.bigRowMonthCount()

        }

        return self.bigRowYearCount()

    }

    func selectToday() {

        self.selectRow(self.todayPath().row, inComponent: MONTH, animated: false)

        self.selectRow(self.todayPath().section, inComponent: YEAR, animated: false)

    }

    func todayPath() -> NSIndexPath {

        //row ==month  section ==year

        var row:Int = 0

        var section:Int = 0

        let currentmonth = self.currentMonthName()

        let currentYear = self.currentYearName()

        let count:Int = (self.months?.count)!

        for month in 0..<count{

            let cellMonth = months![month] as! String

            if cellMonth == currentmonth {

                let currentRow:Int = (self.months?.indexOfObject(cellMonth))!

                row = currentRow

                //let rowCount:Int = self.bigRowMonthCount()/2

                row = row + self.bigRowMonthCount()/2

                break

            }

        }

        let Ycount:Int = (self.years?.count)!

        for year in 0..<Ycount{

            let cellYear = years![year] as! String

            if cellYear == currentYear {

                let currentRow:Int = (self.years?.indexOfObject(cellYear))!

                section = currentRow

               // let rowCount:Int = self.bigRowYearCount()/2

                section = section + self.bigRowYearCount()/2

                break

            }

        }

        return NSIndexPath.init(forRow: row, inSection: section)

    }

    func bigRowMonthCount() -> NSInteger {

        return (self.months?.count)! * bigRowCount

    }

    func bigRowYearCount() -> NSInteger {

        return (self.years?.count)! * bigRowCount

    }

    func componentWidth() -> CGFloat {

        let numberOfComponent:CGFloat = (CGFloat)(self.componentNumber)

        return self.bounds.size.width / numberOfComponent

    }

    func titleForRow(row:Int ,forComponent component:Int) -> String {

        if component == MONTH {

            let monthCount:Int = (self.months?.count)!

            return (self.months?.objectAtIndex(row % monthCount))! as! String

        }

        let  yearCount:Int = (self.years?.count)!

        return (self.years?.objectAtIndex(row % yearCount))! as! String

    }

    func labelForComponent(component:Int , Selected selected:Bool) -> UILabel {

        let frame = CGRectMake(0, 0, self.componentWidth(), (CGFloat)(rowHeight))

        let label = UILabel.init(frame: frame)

        label.textAlignment = NSTextAlignment.Center

        label.backgroundColor = UIColor.clearColor()

        label.textColor = selected ? UIColor.blueColor() : UIColor.blackColor()

        label.font = UIFont.boldSystemFontOfSize(18)

        label.userInteractionEnabled = false

        label.tag = LABEL_TAG

        return label

    }

    func currentMonthName() -> String {

        let date = NSDate()

        let formatter = NSDateFormatter()

        formatter.dateFormat = "MMMM"

        return formatter.stringFromDate(date)

    }

    func currentYearName() -> String {

        let date = NSDate()

        let formatter = NSDateFormatter()

        formatter.dateFormat = "yyyy"

        return formatter.stringFromDate(date)

    }

}

© 著作权归作者所有

共有 人打赏支持
媛美一生
粉丝 15
博文 55
码字总数 11281
作品 0
浦东
iOS工程师
JQuery datepicker 使用方法

DatePicker基本使用方法: <!DOCTYPE html><html><head> <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> ......

伯洛芒果汁。
2013/03/10
0
0
Jquery日期、时间选择插件

Jquery日期、时间选择插件 准备工作 首先请到jqueryui.com官网下载datepicker插件代码,注意官网提供了整个jquery ui的所有插件下载,但是您可以选择其中几个用到的插件下载,本文中只用到d...

风中帆
2015/03/06
0
0
时间与日期选择器——Mars Android开发视频之第一季第十六集(重)

1· TimePicker的使用方法 TimePicker的样子(4.2版本): 下面,我们来添加一个TimePicker: 这样,就添加上了: 1.1 获取用户选择的时间: 声明成员变量: 接着获取这个控件: 然后实现Tim...

周田
2015/08/21
0
0
[非凡程序员]手写UIDatePicker和UIPickerView

// // ViewController.h // 手写UIDatePicker // // Created by 非凡 程序员 on 15/11/13. // Copyright (c) 2015年 非凡 程序员. All rights reserved. // #import <UIKit/UIKit.h> @interf......

温暖c
2015/11/13
0
0
Objective-c 手写UIDatePicker

// // ViewController.m // 手写UIDatePicker // // Created by 非凡 程序员 on 15/11/13. // Copyright (c) 2015年 非凡 程序员. All rights reserved. // .h文件 #import <UIKit/UIKit.h> ......

xtzPioneer
2015/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

docker中安装了RabbitMQ后无法访问其Web管理页面

在官网找了"$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management"这条安装命令,在docker上安装了RabbitMQ,,结果输入http://localhost:8080并不......

钟然千落
26分钟前
0
0
spring-cloud | 分布式session共享

写在前面的话 各位小伙伴,你们有福了,这一节不仅教大家怎么实现分布式session的问题,还用kotlin开发,喜欢kotlin的小伙伴是不是很开心! 以前在写Android的时候,就对客户端请求有一定的认...

冯文议
45分钟前
0
0
c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
4
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部