如何检查我在使用 datePickerView 选择后选择的时间是不是在 Swift 的范围内(12:00-14:30)?我不知道如何开始

Posted

技术标签:

【中文标题】如何检查我在使用 datePickerView 选择后选择的时间是不是在 Swift 的范围内(12:00-14:30)?我不知道如何开始【英文标题】:How do I check if the time I picked after selecting with datePickerView is within a range (12:00-14:30) on Swift? I have no idea how to start如何检查我在使用 datePickerView 选择后选择的时间是否在 Swift 的范围内(12:00-14:30)?我不知道如何开始 【发布时间】:2016-05-01 12:30:45 【问题描述】:

This is the screenshot of the UI. Once select book, if the time is not within range, there would be an alertView popup.

【问题讨论】:

【参考方案1】:

您可以设置 UIDatePicker 视图的 minimum 和 maximum 日期属性。

您可以使用NSDateComponents 创建日期,只需设置小时和分钟组件。

这不会显示弹出窗口,但用户将无法选择无效日期。 (这是推荐的行为)。

要检查输入字段中的日期是否有效,您可以使用NSDate comparison methods 来确定您的最小和最大日期。

【讨论】:

【参考方案2】:

您可以按照 Pandafox 回答中的建议,设置您的UIDatePickerminimumDatemaximumDate。或者回答你的问题

由于 Swift 中没有给出其他两个答案,我将尝试以下方法。

首先,你需要设置你的选择器来监听控制事件

// Add this in viewDidLoad
datePicker.addTarget(self, action: "changedAction", forControlEvents: UIControlEvents.ValueChanged)

然后在动作中,获取值,检查范围内,如果需要显示警报。

func changedAction() 
    var datePicked = datePicker.date

    if datePicked.isGreaterThanDate(endDate) && datePicked.isLessThanDate(startDate) 
        // show alert
        let alertController = UIAlertController(title: "Warning", message: "Date picked out of range", preferredStyle: UIAlertControllerStyle.Alert)
        alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))

        self.presentViewController(alertController, animated: true, completion: nil)
    

使用扩展方法比较日期,查看更多here

extension NSDate 
func isGreaterThanDate(dateToCompare: NSDate) -> Bool 
    return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending


func isLessThanDate(dateToCompare: NSDate) -> Bool 
    return self.compare(dateToCompare) == NSComparisonResult.OrderedAscending

【讨论】:

【参考方案3】:

你可以这样检查

- (void)viewDidLoad 

    [super viewDidLoad];
    UIDatePicker* picker = [[UIDatePicker alloc]initWithFrame:self.view.bounds];
    [self.view addSubview:picker];
    picker.datePickerMode = UIDatePickerModeTime;
    [picker addTarget:self action:@selector(pickerAction:) forControlEvents:UIControlEventValueChanged];


- (void)pickerAction:(UIDatePicker*)picker

    // do something such as check if the picker.data is valid
    NSLog(@"pickerAction %@",picker.date);

【讨论】:

【参考方案4】:

您可以使用此功能检查所选日期(日期)是否在范围内(开始日期 - 结束日期)

- (BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate

    return ([date compare:beginDate] == NSOrderedAscending) && ([date compare:endDate] == NSOrderedDescending)

对于斯威夫特:

extension NSDate

    func isBetweenDates(beginDate: NSDate, endDate: NSDate) -> Bool
    
        return self.compare(beginDate) == .OrderedAscending && self.compare(endDate) == .OrderedDescending
    

【讨论】:

更多信息请见***.com/questions/1072848/… 你知道swift吗? 我发布的链接还包含一个 swift 示例

以上是关于如何检查我在使用 datePickerView 选择后选择的时间是不是在 Swift 的范围内(12:00-14:30)?我不知道如何开始的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 的弹出式 datePickerView 中添加完成按钮?

如何检查 Angular 2 下拉多选的所有选项

如何对使用了autolayout的UIView添加动画

如何在 jQuery 中重置单选按钮以便不检查任何单选按钮

AngularJs:如何设置基于模型检查的单选按钮

如何在组合框中获取已选中的单选按钮?