2016-09-20 51 views

回答

5

終於,我自己找到了解決辦法。在didSelectRow方法檢查選定的一天是星期日?如果是,那麼確定,但如果不是,則重新加載組件以選擇最近的星期日。

FUNC pickerView(pickerView:UIPickerView,didSelectRow行:中等,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) 


    } 

} 

方法,其檢查星期日是以下一個

FUNC isGivenDaySunday(selectedDay:中等,selectedMonth的:int ,selectedYear的:int) - >(isSunday:布爾,nextSundayAsWeekDay:中等,sundayDate:的NSDate){ 讓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) 

    } 

}