1 つのピッカーを含む ViewController を作成しました。そのビューがトリガーされ、スーパービューで押された 4 つのボタンのいずれかに応じて、4 つのデータ配列の 1 つがピッカーに表示され、入力されます。サブビューに という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
、サブビューが値が変更されたことを認識していないことです。基本的に、どのボタンを押しても、最初に押したボタンに対応するデータで満たされたピッカーが表示されます。さらに複雑なことに、おそらく、スーパービューはマスター/ディテール テンプレートの詳細ビューです。
pickerType
プロパティは次のように作成されます。
@property (assign) int pickerType;
@synthesize pickerType=pickerType_;
ARCを使用しています。これが私の愚かなプログラミング エラーなのか、それともビューのライフサイクルと関係があるのか はわかりません。