2013-03-11 102 views
5

我跟着就在這裏一對夫婦的YouTube教程以及建議,但我似乎無法讓我的UIPickerView來顯示其數據。我用填充三個數組選擇器,我想我已經正確實現的代碼,但很明顯的東西是錯誤的。拾取器正確顯示元件的數量,該問題是,它們都被顯示爲「?」UIPickerView不顯示數據

我嘗試了選擇器的委託設置爲自我,但也不能工作。提前致謝。

這是我的.h文件:

@interface BACcalcViewController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate> 
@property(strong, nonatomic) IBOutlet UIPickerView *personInfoPicker; 
@property(strong, nonatomic) NSArray *heightsArray; 
@property(strong, nonatomic) NSArray *weightsArray; 
@property(strong, nonatomic) NSArray *timeArray; 
@end 

這是我的.m文件:

@interface BACcalcViewController() <UIPickerViewDataSource, UIPickerViewDelegate> 

@end 

@implementation BACcalcViewController 


@synthesize personInfoPicker, heightsArray, weightsArray, timeArray; 
- (void)viewDidLoad 
{ 

[super viewDidLoad]; 

heightsArray = [NSArray arrayWithObjects: 
         @"5ft 0in", 
         @"5ft 1in", 
         @"5ft 2in", 
         @"5ft 3in", 
         @"5ft 4in", 
         @"5ft 5in", 
         @"5ft 6in", 
         @"5ft 7in", 
         @"5ft 8in", 
         @"5ft 9in", 
         @"5ft 10in", 
         @"5ft 11in", 
         @"6ft 1in", 
         @"6ft 2in", 
         @"6ft 3in", 
         @"6ft 4in", 
         @"6ft 5in", 
         @"6ft 6in", 
         @"6ft 7in", 
         @"6ft 8in", 
         nil]; 

weightsArray = [NSArray arrayWithObjects: 
        @"100", 
        @"110", 
        @"120", 
        @"130", 
        @"140", 
        @"150", 
        @"160", 
        @"170", 
        @"180", 
        @"190", 
        @"200", 
        @"210", 
        @"220", 
        @"230", 
        @"240", 
        @"250", 
        @"260", 
        nil]; 


timeArray = [NSArray arrayWithObjects: 
      @"1", 
      @"2", 
      @"3", 
      @"4", 
      @"5", 
      @"6", 
      nil]; 
} 



- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)personInfoPicker 
{ 
    return 3; 
} 


- (NSInteger)pickerView:(UIPickerView *)personInfoPicker numberOfRowsInComponent: (NSInteger)component 
{ 
    if (component == 0) 
     return [heightsArray count]; 
    else if (component == 1) 
     return [weightsArray count]; 
    else 
     return [timeArray count]; 
} 

- (NSString *)pickerview:(UIPickerView *)personInfoPicker titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{  
    if (component == 0) 
     return [heightsArray objectAtIndex:row]; 
    else if (component == 1) 
     return [weightsArray objectAtIndex:row]; 
    else 
     return [timeArray objectAtIndex:row]; 
} 
@end 
+1

已經設置您UIPickerView的委託和數據源到文件的所有者? – channi 2013-03-11 07:28:01

+0

是的,我迷上了所有的IB部分的情節串連圖板就像YouTube視頻一樣。 – theJPE 2013-03-11 07:33:31

+0

然後嘗試@ Durgaprasad的答案,一旦它可以幫助 – channi 2013-03-11 07:34:32

回答

18

您需要設置選擇器視圖的dataSource和填充陣列後調用reloadAllComponents

self.personInfoPicker.delegate = self; 
self.personInfoPicker.dataSource = self; 
[self.personInfoPicker reloadAllComponents]; 
+0

您應該設置'delegate'和'dataSource'第一,然後調用'reloadAllComponents'。所以你得到的代碼是正確的,而不是順序。 – 2013-03-11 07:45:34

+0

我應該如何設置數據源:personInfoPicker.dataSource = self; – theJPE 2013-03-11 07:48:54

+0

你爲什麼不試試?我已經用你需要的確切代碼更新了我的答案。 – 2013-03-11 07:49:55

2

嘗試初始化所有三個arrarys在init()方法。

1

你的代碼沒問題。只需要在方法中改變「pickerView」名稱的對象。

更換

- (NSInteger)pickerView:(UIPickerView *)personInfoPicker numberOfRowsInComponent: (NSInteger)component 

通過,

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent: (NSInteger)component 

而且,

- (NSInteger)pickerView:(UIPickerView *)personInfoPicker numberOfRowsInComponent: (NSInteger)component 

通過,

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent: (NSInteger)component 

由於personInfoPickerPickerView的對象,因此您已經在.h文件中使用過,因此在爲pickerView加載數據時會發生衝突。

希望,它會幫助你。

謝謝。

1

我覺得你的代碼是完全正確的設置datasourcedelegate很好,但你忘了去年viewdidload重裝pickerview是解決你的問題的重新加載uipickerview所以

0

我想你我以前不分配使用的數組作爲選擇器如的數據源

NSMutableArray *_month_ary=[[NSMutableArray alloc]initWithObjects:@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12", nil]; 
2

你可以試試下面這段代碼。

`NSMutableArray *_month_ary=[[NSMutableArray alloc]initWithObjects:@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12", nil]; 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; 
{ 
    return 1; 
} 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 


    if ([pickerView isEqual:_month_picker_view]) { 
     return [_month_ary count]; 
    } 
    return 0; 
} 
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 


    if ([pickerView isEqual:_month_picker_view]) 
    { 
     return [_month_ary objectAtIndex:row]; 
    } 
    return nil; 
} 
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 


    if ([pickerView isEqual:_month_picker_view]) { 
     _Pay_Month_txt.text=[_month_ary objectAtIndex:row]; 
     deal_cridit_card_month_str = [_month_ary objectAtIndex:row]; 
    } 
}` 
1

我複製了你的初始代碼,現在發現你的bug了。還有就是

- (NSString *)pickerview:(UIPickerView *)personInfoPicker titleForRow:(NSInteger)row forComponent:(NSInteger)component 

在委託方法的名稱拼寫錯誤

相反,它必須是

- (NSString *)pickerView:(UIPickerView *)personInfoPicker titleForRow:(NSInteger)row forComponent:(NSInteger)component 

如果你寫pickerview它會聲明在類的新方法,這將永遠不會被調用。如此簡單,但無論如何是煩人:-)

+0

這是完全相同的代碼。 – CyberMew 2016-01-28 10:39:46