小时更改时更改UIPickerView的内容?

时间:2015-02-19 18:43:54

标签: ios swift datepicker uipickerview

解决方案:我可以通过在viewDidLoad的开头创建小时来触发NSTimer。

上一条消息:
我想在UIPickerView中更改列表中的内容,以便第一个选项始终是当前小时+1。如果用户在15:59启动应用程序,则第一项将是16:00。但如果是16:01,第一项应该是17:00 我怎样才能重新加载数据,这样当用户看到选择器时,第一项始终是currentHour + 1? 我重新初始化array中的loadData(),如果我将其添加到viewforRow中,则pickerView为空。

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return array.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return array[row]
    }

    func loadData(){
        var formatter = NSDateFormatter()
        formatter.dateFormat = "HH"
        let date = NSDate()
        let str = formatter.stringFromDate(date)
        let hourNow = str.toInt()!
        if ( hourNow+1 < 22 ){
            array = [String]()
            for (var i = hourNow+1; i<22; i++) { //if 15:00:
                let num : Int = i //starts at 16:00
                array.append(num.toString())
            }
        }
    }

    //view for row
    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {
        var mView = UIView(frame: CGRectMake(0,0, 50,20))
        let label = UILabel(frame:CGRectMake(0,0, 50,20))
        label.text = array[row]
        mView.addSubview(label)
        return mView
    }

1 个答案:

答案 0 :(得分:3)

您可以获取当天的当前小时,只需添加一个:

func currentHourPlusOne()->Int{
    var now = NSDate()

    var calendar = NSCalendar.currentCalendar()
    var components = calendar.components(.CalendarUnitHour, fromDate: now)

    return components.hour + 1
}

或者,简短版本(感谢Leonardo

func currentHourPlusOne()->Int{
    return NSCalendar.currentCalendar().component(.CalendarUnitHour, fromDate: NSDate()) + 1
}

如您所见,我将当前日期加载到NSCalendar,我只需要一小时。小时总是当前小时。例如,如果它是10:30,那么小时是10.所以你只需要增加一个小时,你就得到了你想要的东西。

要在UIPickerView方法的最后一行更新数组后重新加载reloadAllComponents,只需在您的选择器上调用loadData

func loadData(){
    var formatter = NSDateFormatter()
    formatter.dateFormat = "HH"
    let date = NSDate()
    let str = formatter.stringFromDate(date)
    let hourNow = str.toInt()!
    if ( hourNow+1 < 22 ){
        array = [String]()
        for (var i = hourNow+1; i<22; i++) { //if 15:00:
            let num : Int = i //starts at 16:00
            array.append(num.toString())
        }
    }
    picker.reloadAllComponents()
}