2012-11-10 18 views
-1

我試圖使用array = [[NSArray alloc] [email protected]"1",@"1.2"[email protected]"50.0",nil]填充UIPickerView。但問題是,一旦我在TabBarController中單擊它,視圖就會自動崩潰。另外,這涉及很多工作。什麼是最優雅的方式來實現這一目標?如何以最優雅的方式將UIPickerView從1.0添加到50.0?

更新:這是代碼崩潰的錯誤 - 「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

有關如何填充選取器視圖的想法,請參閱http://stackoverflow.com/questions/4020081/most-effective-way-to-populate-a-picker-view-with-range-of-integers。什麼錯誤信息到底是什麼意思? – Anna

+0

這似乎在工作。但我怎麼能開始填充數據從1.0(浮點數)到50.0?例如1.0,1.1,1.2 ... 1.9,2.0等 –

+0

只需將範圍設置爲10至500(相同數量的值爲1.0至50.0,以0.1爲增量)並將該字符串顯示爲'(row + PICKER_MIN)/ 10.0'格式設置爲'%0.1f'。 – Anna

回答

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 

哪裏條目是包含數組中的所有格式numbers.If你也想知道爲什麼你的應用程序崩潰,發佈代碼。

編輯

關於填充視圖:在視圖中並加載方法開始填充約推值到選擇器視圖的array.Don't擔心,它們會被自動加載:

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,等...

+0

我已經實現了所有委託方法。但我怎麼能開始填充數據從1.0(浮點數)到50.0?例如1.0,1.1,1.2 ... 1.9,2.0等 –

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]; 
} 

數字格式化程序用於確保爲用戶的區域設置正確格式化小數。

+0

你能告訴我數組的問題嗎?我用代碼更新了這個問題。 –

+0

這裏'num'是什麼? –

+0

'num'是將爲該行顯示的數字。 – rmaddy

相關問題