我创建了一个包含一个选择器的 ViewController。它的视图被触发以显示并使用四个数据数组之一填充选择器,具体取决于在超级视图中按下了四个按钮中的哪一个。我给子视图一个int
名为 的属性pickerType
,然后在按钮代码中设置它,如下所示:
- (IBAction)chooseDepType:(id)sender
{
if (pickerView==nil)
{
pickerView = [[Picker alloc] initWithNibName:@"Picker" bundle:nil];
//send message to next view telling which array to load in picker
pickerView.pickerType=1;
}
[self.view addSubview:pickerView.view];
}
其他按钮方法看起来相同,只是pickerType
设置为不同的值。然后,在子视图中,我设置了数据源和委托方法,如下所示:
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
if(pickerType_ ==1)
{
// return the appropriate number of components, for instance
return 1;
}
}
我遇到的问题是,即使我pickerView
在每个按钮的代码中设置了一个新值,我的子视图也没有识别出该值已更改。基本上,无论我按下哪个按钮,它都会向我显示一个选择器,其中填充了与我按下的第一个按钮相对应的数据。使事情复杂化,也许,superview 是 Master-Detail 模板中的 Detail 视图。
pickerType
属性是这样创建的:
@property (assign) int pickerType;
@synthesize pickerType=pickerType_;
我正在使用 ARC。我不知道这是否是我的一个愚蠢的编程错误,或者与视图的生命周期有关。