解决方案:我可以通过在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
}
答案 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()
}