Ios 当小时发生变化时,是否更改UIPickerView的内容?

Ios 当小时发生变化时,是否更改UIPickerView的内容?,ios,swift,datepicker,uipickerview,Ios,Swift,Datepicker,Uipickerview,解决方案:通过在viewDidLoad的开始处创建NSTimer,我可以在小时改变时触发NSTimer 上一条消息: 我想在UIPickerView中更改列表中的内容,以便第一个选项始终为当前小时+1。如果用户在15:59启动应用程序,则第一项将在16:00启动。但是如果是16:01,第一项应该是17:00。 如何重新加载数据,以便用户在查看选择器时,第一项始终是currentHour+1? 我在loadData()中重新初始化数组,如果我在viewforRow中添加它,则pickerView为

解决方案:通过在viewDidLoad的开始处创建NSTimer,我可以在小时改变时触发NSTimer

上一条消息:
我想在UIPickerView中更改列表中的内容,以便第一个选项始终为当前小时+1。如果用户在15:59启动应用程序,则第一项将在16:00启动。但是如果是16:01,第一项应该是17:00。
如何重新加载数据,以便用户在查看选择器时,第一项始终是currentHour+1? 我在
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
    }
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
返回数组.count
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->字符串!{
返回数组[行]
}
func loadData(){
var formatter=NSDateFormatter()
formatter.dateFormat=“HH”
let date=NSDate()
设str=formatter.stringFromDate(日期)
让hourNow=str.toInt()!
如果(小时数+1<22){
数组=[String]()
对于(变量i=hourNow+1;i UIView{
var mView=UIView(帧:CGRectMake(0,0,50,20))
let label=UILabel(帧:CGRectMake(0,0,50,20))
label.text=数组[行]
mView.addSubview(标签)
返回mView
}

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

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

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

    return components.hour + 1
}
或者,简短版本(感谢)

如您所见,我获取当前日期并将其加载到
NSCalendar
中,其中仅获取小时数。小时数始终获取当前小时数。例如,如果是10:30,则小时数为10。因此,您只需添加一个小时,就可以得到所需的时间

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

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()
}
func loadData(){
var formatter=NSDateFormatter()
formatter.dateFormat=“HH”
let date=NSDate()
设str=formatter.stringFromDate(日期)
让hourNow=str.toInt()!
如果(小时数+1<22){
数组=[String]()

对于(var i=hourNow+1;iThanks),我将尝试此方法。关于重新加载,是的,但我可以将此重新加载方法放在哪里?在更新数组后,将其放在某个位置。当前在loadData中。您应该将.HourCalendarUnit更改为新格式。CalendarUnitHourreturn NSCalendar.currentCalendar().component(.CalendarUnitHour,fromDate:NSDate())+1谢谢你的回答,我实际上可以用一个简单的NSTimer触发这个方法,它只工作一次。我会用NSCalendar保留这个方法的建议,谢谢你的回答
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()
}