swift – UIDatePicker仅显示星期日的日期?

前端之家收集整理的这篇文章主要介绍了swift – UIDatePicker仅显示星期日的日期?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们如何设置UIDatePicker值以在 swift iOS中仅显示星期日的日期?

解决方法

最后,我自己找到了解决方案.在didSelectRow方法中检查所选日期是否是星期日???如果是,则确定,但如果没有,则重新加载组件以选择最近星期日的日期.

func pickerView(pickerView:UIPickerView,didSelectRow行:Int,inComponent组件:Int){

if component == 0 {
        pickerView.reloadComponent(1)
    }

    let titleLabel = pickerView.viewForRow(row,forComponent: component) as? UILabel
    titleLabel?.font = UIFont(name: BCGConstants.Fonts.Name.ProximaNovaBold,size: 27)!

    var dayValue = pickerView.selectedRowInComponent(1) + 1
    let monthValue = pickerView.selectedRowInComponent(0) + 1
    var yearValue = 0

    let unitFlags: NSCalendarUnit = [.Day,.Month,.Year,.Weekday]
    let currentDateComponents = NSCalendar.currentCalendar().components(unitFlags,fromDate: NSDate())

    if monthValue > currentDateComponents.month || (dayValue >= currentDateComponents.day && monthValue == currentDateComponents.month ) {
        yearValue = currentDateComponents.year
    } else {
        yearValue = currentDateComponents.year + 1
    }


    debugPrint("\(self.isGivenDaySunday(dayValue,selectedMonth: monthValue,selectedYear: yearValue)) day = \(dayValue) month = \(monthValue) )")

    let sundayCheck = self.isGivenDaySunday(pickerView.selectedRowInComponent(1) + 1,selectedMonth: pickerView.selectedRowInComponent(0) + 1,selectedYear: yearValue)

   if sundayCheck.isSunday {

        self.startDateTextField.text = sundayCheck.sundayDate?.fullStyleDateString
        self.newBootcamp?.startDate = sundayCheck.sundayDate!


    } else {


        //            titleLabel?.font = UIFont(name: BCGConstants.Fonts.Name.ProximaNovaBold,size: 27)!
        //            titleLabel?.textColor = UIColor.lightGrayColor()

        if dayValue > 15 {
            dayValue = pickerView.selectedRowInComponent(1) - (7 - sundayCheck.nextSundayAsWeekDay)

            pickerView.selectRow(dayValue,inComponent: 1,animated: true)
        } else {
            dayValue = pickerView.selectedRowInComponent(1) + sundayCheck.nextSundayAsWeekDay

            pickerView.selectRow(dayValue,animated: true)
        }


        var confirmSunday = self.isGivenDaySunday(dayValue + 1,selectedYear: yearValue)
      //  Added by mohsin : Reason bug : selecting prevIoUs day
        if confirmSunday.sundayDate?.isLessThanDate(NSDate()) == true {

             confirmSunday = self.isGivenDaySunday(dayValue,selectedYear: yearValue + 1)
            //TODO: Need to be verify again : If not working fine then you must try to change next commented statement and uncomment it
            // dayValue = pickerView.selectedRowInComponent(1) + sundayCheck.nextSundayAsWeekDay

            pickerView.selectRow(dayValue - 1,animated: true)

        }

        self.startDateTextField.text = confirmSunday.sundayDate?.fullStyleDateString
        self.newBootcamp?.startDate = confirmSunday.sundayDate!

        debugPrint(confirmSunday.sundayDate?.fullStyleDateString)


    }

}

检查星期日的方法是跟随一个

func isGivenDaySunday(selectedDay:Int,selectedMonth:Int,selectedYear:Int) – > (isSunday:Bool,nextSundayAsWeekDay:Int,sundayDate:NSDate?){
        let unitFlags:NSCalendarUnit = [.Day,.Weekday]

let selectedDateComponents = NSDateComponents()

    selectedDateComponents.month = selectedMonth
    selectedDateComponents.day = selectedDay
    selectedDateComponents.year = selectedYear

    let selectedDate = NSCalendar(identifier: NSCalendarIdentifierGregorian)?.dateFromComponents(selectedDateComponents)

    let newSelectedDateComponent = NSCalendar.currentCalendar().components(unitFlags,fromDate: selectedDate!)

    if newSelectedDateComponent.weekday == 1 { // 1 means SUNDAY as per Gregorian
        return (true,selectedDate)
    } else {
       return (false,8 - newSelectedDateComponent.weekday,nil) 

    }

}

猜你在找的Xcode相关文章