2012-09-06 121 views
6

`我正在創建一個UIPickerView,但它沒有從數組中取數據,因爲委託方法沒有被調用。我設置了UIPickerviewdelegate和數據源,但仍然沒有工作。可能是沒有調用委託方法的原因?????如果有人知道它,請告訴我。提前感謝。爲什麼UIPickerView委託方法即使在設置委託協議後也不會被調用?

picker.delegate=self; 
picker.dataSource=self; 



arrayOfState = [[NSMutableArray alloc] init]; 
[self.arrayOfState addObject:@"Assam"]; 
[arrayOfState addObject:@"Andhra Pradesh"]; 
[arrayOfState addObject:@"Madhya Pradesh"]; 
[arrayOfState addObject:@"West Bengal"]; 
[self.arrayOfState addObject:@"Orissa"];  
[self.arrayOfState addObject:@"Meghalaya"]; 
[arrayOfState addObject:@"Tripura"]; 
[arrayOfState addObject:@"Arunachal Pradesh"]; 
[arrayOfState addObject:@"Jammu and Kashmir"]; 

picker=[[UIPickerView alloc] initWithFrame:CGRectMake(0.0f,100.0f,40.0f,120.0f)]; 
picker.showsSelectionIndicator=YES; 
+0

發佈涉及的代碼的特定部分。否則,沒有人能夠提供很多幫助。 –

+0

之後,我已經實現了像....numberOfComponentsInPickerView,didselectrow,numberofRowsinComponent等委託方法......但這些都不是在我的應用程序中調用... – user1523344

+0

@ user1523344,你如何添加你的UIPickerView?在'IB'中添加或編程創建它? – Hemang

回答

6

試試這個,

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
arrayOfState = [[NSMutableArray alloc] init]; 
[self.arrayOfState addObject:@"Assam"]; 
[arrayOfState addObject:@"Andhra Pradesh"]; 
[arrayOfState addObject:@"Madhya Pradesh"]; 
[arrayOfState addObject:@"West Bengal"]; 
[self.arrayOfState addObject:@"Orissa"];  
[self.arrayOfState addObject:@"Meghalaya"]; 
[arrayOfState addObject:@"Tripura"]; 
[arrayOfState addObject:@"Arunachal Pradesh"]; 
[arrayOfState addObject:@"Jammu and Kashmir"]; 

picker=[[UIPickerView alloc] initWithFrame:CGRectMake(0.0f,100.0f,40.0f,120.0f)]; 
picker.delegate=self; 
picker.dataSource=self; 
picker.showsSelectionIndicator=YES; 
[self.view addSubView:picker]; 
} 

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
    return 1; 
} 

// Total rows in our component. 
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [arrayOfState count]; 
} 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

     NSString *title; 
     title=[arrayOfState objectAtIndex:row]; 
     return title; 
    } 


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
} 
3

通常當存在不叫委託方法有三個方面的原因:

  1. 您沒有設置一個類是委託。看起來你做了但是在分配內存之前設置你的委託對象對我來說聽起來很神奇。

  2. 您沒有在符合委託協議的類中實現委託方法。

  3. 你沒有設置你的類爲符合委託協議(這意味着你沒有寫這樣的事情

@interface yourClass : whateverurclassheritfrom <UIPickerViewDelegate>

1

Add objects to array before calling below code

picker=[[UIPickerView alloc] initWithFrame:CGRectMake(0.0f,100.0f,40.0f,120.0f)]; 
picker.delegate=self; 
picker.dataSource=self; 
picker.showsSelectionIndicator=YES; 
[self.view addSubView:picker]; 

問題是的,你在設置delegatedatasource之前allocatingpicker