我尝试使用array = [[NSArray alloc] initWithObjects=@"1",@"1.2"....@"50.0",nil]
填充UIPickerView。但问题是,一旦我在TabBarController中单击它,视图就会自动崩溃。此外,这涉及很多工作。实现这一目标的最优雅方式是什么?
更新:这是使视图崩溃的代码 - “lldb”。你能告诉我这个问题吗?
- (void)viewDidLoad
{
kms = [[NSArray alloc] initWithObjects:@"1",@"1.1",@"1.2",@"1.3",@"1.4",@"1.5",@"1.6",@"1.7",@"1.8",@"1.9",@"2.0",@"2.1",@"2.2",@"2.3",@"2.4",@"2.5",@"2.6",@"2.7",@"2.8",@"2.9",@"3.0",@"3.1",@"3.2",@"3.3",@"3.4",@"3.5",@"3.6",@"3.7",@"3.8",@"3.9",@"4.0",@"4.1",@"4.2",@"4.3",@"4.4",@"4.5",@"4.6",@"4.7",@"4.8",@"4.9",@"5.0",@"5.1",@"5.2",@"5.3",@"5.4",@"5.5",@"5.6",@"5.7",@"5.8",@"5.9",@"6.0",@"6.1",@"6.2",@"6.3",@"6.4",@"6.5",@"6.6",@"6.7",@"6.8",@"6.9",@"7.0",@"7.1",@"7.2",@"7.3",@"7.4",@"7.5",@"7.6",@"7.7",@"7.8",@"7.9",@"8.0",@"8.1",@"8.2",@"8.3",@"8.4",@"8.5",@"8.6",@"8.7",@"8.8",@"8.9",@"9.0",@"9.1",@"9.2",@"9.3",@"9.4",@"9.5",@"9.6",@"9.7",@"9.8",@"9.9",@"10.0",@"10.1",@"10.2",@"10.3",@"10.4",@"10.5",@"10.6",@"10.7",@"10.8",@"10.9",@"11.0",@"11.1",@"11.2",@"11.3",@"11.4",@"11.5",@"11.6",@"11.7",@"11.8",@"11.9",@"12.0",@"12.1",@"12.2",@"12.3",@"12.4",@"12.5",@"12.6",@"12.7",@"12.8",@"12.9",@"13.0",@"13.1",@"13.2",@"13.3",@"13.4",@"13.5",@"13.6",@"13.7",@"13.8",@"13.9",@"14.0",@"14.1",@"14.2",@"14.3",@"14.4",@"14.5",@"14.6",@"14.7",@"14.8",@"14.9",@"15.0",@"15.1",@"15.2",@"15.3",@"15.4",@"15.5",@"15.6",@"15.7",@"15.8",@"15.9",@"16.0",@"16.1",@"16.2",@"16.3",@"16.4",@"16.5",@"16.6",@"16.7",@"16.8",@"16.9",@"17.0",@"17.1",@"17.2",@"17.2",@"17.3",@"17.4",@"17.5",@"17.6",@"17.7",@"17.8",@"17.9",@"18.0",@"18.1",@"18.2",@"18.3",@"18.4",@"18.5",@"18.6",@"18.7",@"18.8",@"18.9",@"19.0",@"19.1",@"19.2",@"19.3",@"19.4",@"19.5",@"19.6",@"19.7",@"19.8",@"19.9",@"20.0",@"20.1",@"20.2",@"20.3",@"20.4",@"20.5",@"20.6",@"20.7",@"20.8",@"20.9",@"30.0",@"31.1",@"31.2",@"31.3",@"31.4",@"31.5",@"31.6",@"31.7",@"31.8",@"31.9",@"32.0",@"32.1",@"32.2",@"32.3",@"32.4",@"32.5",@"32.6",@"32.7",@"32.8",@"32.9",@"33.0",@"33.1",@"33.2",@"33.3",@"33.4",@"33.5",@"33.6",@"33.7",@"33.8",@"33.9",@"34.0",@"34.1",@"34.2",@"34.3",@"34.4",@"34.5",@"34.6",@"34.7",@"34.8",@"34.9",@"35.0",@"35.1",@"35.2",@"35.3","@35.4",@"35.5",@"35.6",@"35.7",@"35.8",@"35.9",@"36.0",@"36.1",@"36.2",@"36.3",@"36.4,"@"36.5",@"36.6",@"36.7",@"36.8",@"36.9",@"37.0",@"37.1",@"37.2",@"37.3",@"37.4",@"37.5",@"37.6",@"37.7",@"37.8",@"37.9",@"38.0",@"38.1",@"38.2",@"38.3",@"38.4",@"38.5",@"38.6",@"38.7",@"38.8",@"38.9",@"40.0",@"40.1",@"40.2",@"40.3",@"40.4",@"40.5",@"40.6",@"40.7",@"40.8",@"40.9",@"41.0",@"41.1",@"41.2",@"41.3",@"41.4",@"41.5",@"41.6",@"41.7",@"41.8",@"41.9",@"42.0",@"42.1",@"42.2",@"42.3",@"42.4",@"42.5",@"42.6",@"42.7",@"42.8",@"42.9",@"43.0",@"43.1",@"43.2",@"43.3",@"43.4",@"43.5",@"43.6",@"43.7",@"43.8",@"43.9",@"44.0",@"44.1",@"44.2",@"44.3",@"44.4",@"44.5",@"44.6",@"44.7",@"44.8",@"44.9",@"45.0",@"45.1",@"45.2",@"45.3",@"45.4",@"45.5",@"45.6",@"45.7",@"45.8",@"45.9",@"46.0",@"46.1",@"46.2",@"46.3",@"46.4",@"46.5",@"46.6",@"46.7",@"46.8",@"46.9",@"47.0",@"47.1",@"47.2",@"47.3",@"47.4",@"47.5",@"47.6",@"47.7",@"47.8",@"47.9",@"48.0",@"48.1",@"48.2",@"48.3",@"48.4",@"48.5",@"48.6",@"48.7",@"48.8",@"48.9",@"49.0",@"49.1",@"49.2",@"49.3",@"49.4",@"49.5",@"49.6",@"49.7",@"49.8",@"49.9",@"50.0",nil];
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return kms.count;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [kms objectAtIndex:row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
[kms objectAtIndex:row];
}
答案 0 :(得分:1)
将您的类设置为UIPickerView的委托和数据源,然后实现这些方法:
@synthesize pickerView, entries;
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [entries count];
}
- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [entries objectAtIndex: row];
}
@end
其中entries是包含所有格式化数字的数组。如果您还想知道应用崩溃的原因,请发布代码。
修改
关于填充视图:在视图中确实加载方法开始填充数组。不用担心将值推入选择器视图,它们将自动加载:
entires=[NSMutableArray new];
for(float i=1.0; i<=50.0; i+= 0.1)
{
NSString* pushString=[NSString stringWithFormat: @"%f",i];
[entries addObject: pushString];
}
这使得选择器视图显示1.0,1.1,1.2,1.3等......
答案 1 :(得分:1)
如果通过“优雅”,你的意思是一种没有填充数组的简单方法,那么就这样做:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 500 - 10 + 1; // 1.0 to 50.0 is 491 total rows
}
- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// row 0 becomes 1.0, row 1 becomes 1.1, etc.
float num = row / 10.0 + 1.0;
return [_formatter stringFromNumber:@(num)];
}
- (Void)viewDidLoad {
[super viewDidLoad];
// _formatter is an NSNumberFormatter * ivar
_formatter = [[NSNumberFormatter alloc] init];
[_formatter setNumberStyle: NSNumberFormatterDecimalStyle];
[_formatter setMaximumFractionDigits:1];
}
数字格式化程序用于确保为用户的语言环境正确格式化小数。