【问题标题】:How to block days in UIDatePicker for iOS如何在 iOS 的 UIDatePicker 中阻止天数
【发布时间】:2012-08-25 17:45:21
【问题描述】:

我在我的 IOS 应用程序上使用日期选择器,我想知道是否可以阻止某些日子。例如,我需要阻止一年中的所有星期一,这可能吗?

谢谢。

【问题讨论】:

  • 是的,您只需使用简单的UIPickerView 和自定义数据,很简单。
  • @holex 所以我只使用常规的 UIPickerView 并添加所有日期或什么?
  • 老实说,是的。确切地。这是在UIPickerView 中处理自定义数据的唯一方法,您无法设置标准UIDatePicker 并放弃一些不需要的日子。
  • 是的。 UIDatePicker 只是在 0-31 中添加了几天。无法选择的日期变为灰色。如果用户选择了其中一个灰色的日子,它就会弹开。

标签: iphone ios xcode datepicker uipickerview


【解决方案1】:

您唯一能做的就是添加一个自定义 UIPickerView,如 cmets 中所述,或实现一个为事件 UIControlEventValueChanged 调用的方法,如 here 所述

然后检查有效工作日的新值。您可以通过以下方式获得工作日:

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
return [components weekday]; // 1 = Sunday, 2 = Monday, ...

无法在滚轮中隐藏某些日子。

【讨论】:

    【解决方案2】:

    这是 Swift 4 对这个问题的回答(Nicholas Harlen 的原始回答):

    let datePicker: UIDatePicker = UIDatePicker(frame: .zero)
        datePicker.datePickerMode = .date
        datePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
    
    @objc func datePickerValueChanged(_ sender: UIDatePicker) {
        let calender: Calendar = Calendar(identifier: .gregorian)
        let weekday = calender.component(.weekday, from: sender.date)
        //sunday
        if weekday == 1 {
            datePicker.setDate(Date(timeInterval: 60*60*24*1, since: sender.date), animated: true)
        } else if weekday == 7 {
            datePicker.setDate(Date(timeInterval: 60*60*24*(-1), since: sender.date), animated: true)
        }
    }
    

    【讨论】:

      【解决方案3】:

      我不得不做类似的事情,但找不到删除日期的方法。但是,我最终做的是,如果选择了无效日期,它将反弹到最近的有效日期,类似于如果您设置最小日期并尝试选择之前的日期,控件的处理方式。

      -(void)init
      {
          datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
          [datePicker setDatePickerMode:UIDatePickerModeDate];
          [datePicker setMinimumDate: [NSDate date]];
          [datePicker addTarget:self action:@selector(onDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
      }
      
      -(void)onDatePickerValueChanged:(UIDatePicker *)picker
      {
          // Work out which day of the week is currently selected.
          NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
          NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:picker.date];
          int weekday = [comps weekday];
      
          // Bounce Sundays (weekday=1) forward a day
          if (weekday == 1)
          {
              [datePicker setDate:[NSDate dateWithTimeInterval:60*60*24*1 sinceDate:picker.date] animated: true];
          }
          // Bounce Saturdays (weekday=7) back a day
          else if (weekday == 7)
          {
              [datePicker setDate:[NSDate dateWithTimeInterval:60*60*24*-1 sinceDate:picker.date] animated: true];
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多