UIPickerView-在iOS5中,并非所有行都调用didSelectRow
注意:我已经正确设置了委托,UIPicker在ios6中工作得非常好。 在ios5中,仅当我选择了row0或row5 only时,才会调用didSelectRow:的回调。我有12排 有人知道可能出了什么问题吗 注意:UIPicker的委托和数据源指向具有以下代码的类UIPickerView-在iOS5中,并非所有行都调用didSelectRow,ios5,Ios5,注意:我已经正确设置了委托,UIPicker在ios6中工作得非常好。 在ios5中,仅当我选择了row0或row5 only时,才会调用didSelectRow:的回调。我有12排 有人知道可能出了什么问题吗 注意:UIPicker的委托和数据源指向具有以下代码的类 // returns the number of 'columns' to display. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
if ([pickerView isKindOfClass:[MIDatePicker class]]) {
switch (self.pickermode) {
case MIDatePickerModeDayMonth:
return 2;
break;
case MIDatePickerModeDayMonthYear:
return 3;
break;
default:
break;
}
}
return 3;
}
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if ([pickerView isKindOfClass:[MIDatePicker class]]) {
//month , day , year
switch (component) {
case 0:{
return [self.monthsArray count];
}
break;
case 1:
{
return [self.daysArray count];
}
case 2:{
return [self.yearArray count];
}
default:
break;
}
}
return 3;
}
// returns width of column and height of row for each component.
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
// month , day ,year
switch (component) {
case 0:{
return self.picker.frame.size.width/2;
}
case 1:
return self.picker.frame.size.width/6;
case 2:{
return self.picker.frame.size.width/3;
}
default:
break;
}
return self.picker.frame.size.width;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return pickerView.frame.size.height/5;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
// month , day ,year
switch (component) {
case 0:{
return [NSString stringWithFormat:@" %@ ",[self.monthsArray objectAtIndex:row]];
}
case 1:
return [self.daysArray objectAtIndex:row];
case 2:{
return [self.yearArray objectAtIndex:row];
}
default:
break;
}
return @"";
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSLog(@"selected row:%d , component:%d" , row,component);
}
在ios5中:现在我通过将float强制转换为整数来获得对didSelectRow的所有调用 我的观察:默认选择器高度为216.0。如果我将行高度更改为
pickerView.frame.size.height/3或pickerView.frame.size.height/4,甚至是pickerView.frame.size.height/6,同样的代码也可以工作代码>原因:216.0完全可以被3,4,6整除,当被5整除时,它有0.2个分数。这就是为什么在pickerView.frame.size.height/5的情况下,我只收到第1行和第6行的didSelect调用
合适的解决方案可能是:
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return (int) pickerView.frame.size.height/5;
}
你能添加一些代码吗?嗨@allprog:我添加了一些代码,请告诉我是否需要其他代码我还没有深入挖掘你的代码,但在我看来,对于日期,你最好使用内置的UIDatePicker
类。它在屏幕上显示正确吗?是的,它在ios6上工作得很好。在iOS5中,只有我有这个问题。我不能使用UIDatePicker,因为没有只显示月份和日期的模式。很好的发现!恭喜!