且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何根据按钮按下重新加载/刷新UIPickerView(带有新数据数组)?

更新时间:2023-02-02 13:28:49

您必须实现数据源和代理。



$



   - (IBAction)usButtonPressed:(id)sender {
self.inputArray = self.usArray;
[self.thePicker reloadAllComponents];
}

- (IBAction)mexicoButtonPressed:(id)sender {
self.inputArray = self.mexicoArray;
[self.thePicker reloadAllComponents];
}

数据源方法:

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


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.inputArray count] ;
}

委托方法:

   - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{
return [self.inputArray objectAtIndex:row];
}


IF I wanted a picker, for states/provinces, i haven't seen an example, but I mocked up shown in the link above, a picker for US/Can/Mex. wondering can you dynamically switch the NSMutableArray for the UIPickerView and then have it somehow reload each time you click on US/Can/Mex buttons??? How do I go about doing this. What approach do I take. Looking for someone to point a beginner for a clue in the right direction.

You will have to implement the datasource and the delegate.

once you press a button, set an array pointer to the appropriate array.

than call [thePicker reloadAllComponents];

-(IBAction) usButtonPressed:(id)sender{
    self.inputArray = self.usArray;
    [self.thePicker reloadAllComponents];
}

-(IBAction) mexicoButtonPressed:(id)sender{
    self.inputArray = self.mexicoArray;
    [self.thePicker reloadAllComponents];
}

the datasource methods:

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


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.inputArray count];
}

the delegate methods:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.inputArray objectAtIndex:row];
}