这似乎是直接来自文档的非常标准的代码,所以我不确定我做错了什么……
我的3组件选择器在加载时看起来不正确,选择器上的选择指示器放置得太低(因此灰色条被正确放置,但清晰的凸起外观的覆盖层太低)。
然后,当我选择一行时,它会完美地工作,除非我选择了最后一行,在这种情况下,它会认为我选择了倒数第二行。
数组中的标题计数是正确的(例如,7),当我选择行"0-5“时,它工作得很好,但当我选择行"6”(第7行)时,它仍然认为我选择的是"5“。因此,第六行和第七行都将返回"5“而不是"5和6”。
这三个组件都会发生这种情况,实际上在代码中其他地方我的另一个更简单的选择器中也是以类似的方式发生的(实际上,对于那个选择器,只有当我来自父视图控制器时才会发生这种情况)。当我来自子视图控制器时,这是很好的)。
你能帮上忙吗?
- (void)loadmypicker {
UIPickerView *mypicker = [[UIPickerView alloc] init];
[mypicker setDataSource:self];
[mypicker setDelegate:self];
pickerTitles_Dil = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", nil];
pickerTitles_Eff = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j", @"k", nil];
pickerTitles_Stat = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", nil];
[mypicker setShowsSelectionIndicator:YES];
[mypicker selectRow:0 inComponent:0 animated:NO];
[mypicker selectRow:0 inComponent:1 animated:NO];
[mypicker selectRow:0 inComponent:2 animated:NO];
[mypicker setFrame:CGRectMake(0, 98, 320, 253)];
[self addSubview:mypicker];
[mypicker release];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (component == 0)
return [pickerTitles_Dil objectAtIndex:row];
else if (component == 1)
return [pickerTitles_Eff objectAtIndex:row];
else return [pickerTitles_Stat objectAtIndex:row];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 3;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if (component == 0)
{return [pickerTitles_Dil count];
}
else if (component == 1)
{return [pickerTitles_Eff count];
}
else
{return [pickerTitles_Stat count];
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSLog (@"row: %d, component :%d", row, component);
}
谢谢你的帮助!
其他人也有这个问题吗?总而言之,选取器显示了最后一行,但我无法选择它。谢谢!
发布于 2010-10-19 19:32:26
修复问题:选取器高度不能超过216。因为我是在253点走过来的,所以所有其他问题都随之而来。谢谢!
发布于 2010-10-01 18:26:38
不知何故,我认为下面的数据源方法被弃用了,对吧?
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
如果您尝试使用以下方法来执行此操作,会发生什么情况?
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
也许这会有帮助?但我不确定这是否能帮你解决这个问题。
EDIT:尝试这样做,新方法不能直接返回字符串,但需要视图:
/* Because the UIPickerView expects a UIView for every row you insert in the UIPickerView, you need to make one. What I do here is really simple. I create a UILabel* and with each row it requests I just change the text in the UILabel. */
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
/* Create a UILabel and set it 40 pixels to the right, to make sure it is put nicely in the UIPickerView */
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(40, 0, 280, 25)] autorelease];
label.textColor = [UIColor blackColor];
label.backgroundColor = [UIColor clearColor];
switch (row)
{
default:
case kUnderClock:
label.text = @"Under clock";
break;
case kAboveSlider:
label.text = @"Above lock slider";
break;
case kCenter:
label.text = @"Vertically centered";
break;
}
return label;
}
很抱歉出现了缩进问题,直接从我的博客上复制了这篇文章。
https://stackoverflow.com/questions/3818249
复制