UIActionSheet 内に UIPicker ビューを追加しようとしています! ピッカーのデリゲートとデータソースが正しく設定されました! (アクションシートなしで個別にテストしました)しかし、アクションシートがビューに表示されると、ピッカービューは恐ろしいブラックボックスです!問題を検索したところ、UIPickerView のデータソースとデリゲートが正しく設定されていないと聞きました。uiactionsheet 内に埋め込まれている場合、ピッカービューはそのメソッドを呼び出さないと思いました! だから私はピッカーにすべてのコンポーネントをリロードさせ、アクションシートを
EDIT:私は修正を行い、コードは完全に機能します!
- (void) presentPicker{
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select some value" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Select", nil];
actionSheet.tag = AS_VIEW_TAG;
UIPickerView* picker = nil;
picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 40, 320, 216)];
picker.tag = 90;
picker.dataSource = self;
picker.delegate = self;
[picker setShowsSelectionIndicator:YES];
[actionSheet addSubview:picker];
[actionSheet showInView:self.view];
[actionSheet setFrame:CGRectMake(0, 50, 320, 380)];
}
- (void) willPresentActionSheet:(UIActionSheet *)actionSheet{
if(actionSheet.tag == AS_VIEW_TAG){
UIPickerView* picker = [actionSheet viewWithTag:PICKER_TAG];
//I force reload
[picker reloadAllComponents];
NSArray *subviews = [actionSheet subviews];
[[subviews objectAtIndex:1] setFrame:CGRectMake(20, 266, 280, 46)];
[[subviews objectAtIndex:2] setFrame:CGRectMake(20, 317, 280, 46)];
}
}
UIPicker デリゲート/データソース メソッド
- (NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView{
if (pickerView.tag == 90) {
return 1;
}
else{
return 0;
}
}
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if(pickerView.tag == 90){
return 20;
}
else{
return 0;
}
}
- (UIView*) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 37)];
label.text = [NSString stringWithFormat:@"Value %d", ];
label.textAlignment = UITextAlignmentCenter;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:17];
return label;
}
結果は次のとおりです。