Does UIDatePicker only show Sunday date?

How can we set UIDatePicker values ​​to display only Sunday date in fast iOS?

+5
source share
1 answer
Finally, I myself found a solution. In the didSelectRow method, check if the selected day is selected on Sunday? if so, then fine, but if not, reload the component to select the date for next Sunday.

func pickerView (pickerView: UIPickerView, didSelectRow row: 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, inComponent: 1, animated: true) } var confirmSunday = self.isGivenDaySunday(dayValue + 1, selectedMonth: monthValue, selectedYear: yearValue) // Added by mohsin : Reason bug : selecting previous day if confirmSunday.sundayDate?.isLessThanDate(NSDate()) == true { confirmSunday = self.isGivenDaySunday(dayValue, selectedMonth: monthValue, 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, inComponent: 1, animated: true) } self.startDateTextField.text = confirmSunday.sundayDate?.fullStyleDateString self.newBootcamp?.startDate = confirmSunday.sundayDate! debugPrint(confirmSunday.sundayDate?.fullStyleDateString) } } 

Method that checks Sunday following

func isGivenDaySunday (selectedDay: Int, selectedMonth: Int, selectedYear: Int) β†’ (isSunday: Bool, nextSundayAsWeekDay: Int, sundayDate: NSDate?) {let unitFlags: NSCalendarUnit = [.Day, .Month, .Year, .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, 0, selectedDate) } else { return (false, 8 - newSelectedDateComponent.weekday, nil) } } 
+5
source

All Articles