Ios 当小时发生变化时,是否更改UIPickerView的内容?
解决方案:通过在viewDidLoad的开始处创建NSTimer,我可以在小时改变时触发NSTimer 上一条消息: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为
我想在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()
}