J'ajoute UIPickerView
à UIActionsheet
mais cela fonctionne parfaitement dans ios 7
mais ne fonctionne pas dans ios 8
. Veuillez m'aider à résoudre ce problème.
Ici, j'ai joint une capture d'écran pour cela.
Merci
J'utilise le code suivant pour cela.
UIActionSheet *actionSheet;
NSString *pickerType;
- (void)createActionSheet {
if (actionSheet == nil) {
// setup actionsheet to contain the UIPicker
actionSheet = [[UIActionSheet alloc] initWithTitle:@"Please select" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
actionSheet.backgroundColor = [UIColor clearColor];
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
UIImageView *imageObj = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
imageObj.image = [UIImage imageNamed:@"header.png"];
[pickerToolbar addSubview:imageObj];
UIButton *cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[cancelBtn addTarget:self action:@selector(pickerCancel:)forControlEvents:UIControlEventTouchDown];
// [cancelBtn setImage:[UIImage imageNamed:@"btnInviteCancel.png"] forState:UIControlStateNormal];
[cancelBtn setTitle:@"Cancel" forState:UIControlStateNormal];
cancelBtn.frame = CGRectMake(7.0, 7.0, 65.0, 25.0);
[pickerToolbar addSubview:cancelBtn];
UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[doneBtn addTarget:self action:@selector(pickerDone:)forControlEvents:UIControlEventTouchDown];
//[doneBtn setImage:[UIImage imageNamed:@"btnInviteDone.png"] forState:UIControlStateNormal];
[doneBtn setTitle:@"Done" forState:UIControlStateNormal];
doneBtn.frame = CGRectMake(258.0, 7.0, 55.0, 25.0);
[pickerToolbar addSubview:doneBtn];
[actionSheet addSubview:pickerToolbar];
[pickerToolbar release];
UIPickerView *chPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 200.0)];
chPicker.dataSource = self;
chPicker.delegate = self;
chPicker.showsSelectionIndicator = YES;
[chPicker selectRow:0 inComponent:0 animated:YES];
[actionSheet addSubview:chPicker];
[chPicker release];
[actionSheet showInView:self.view];
[actionSheet setBounds:CGRectMake(0,0,320, 464)];
}
}
Cela ne fonctionne pas car Apple a modifié l'implémentation interne de UIActionSheet
. Veuillez vous référer à la documentation :
Notes de sous-classement
UIActionSheet n'est pas conçu pour être sous-classé, ni si vous ajoutez des vues à sa hiérarchie . Si vous devez présenter une feuille avec plus de personnalisation que celle fournie par l'API UIActionSheet, vous pouvez créer la vôtre et la présenter de manière modale avec presentViewController: animated: complétion :.
Par Apple docs ,
Important :
UIActionSheet
est déconseillé dans iOS 8. (Notez queUIActionSheetDelegate
est également déconseillé.) Pour créer et gérer feuilles d'action dans iOS 8 et versions ultérieures, utilisez plutôtUIAlertController
avec unpreferredStyle
deUIAlertControllerStyleActionSheet
.
Lien vers la documentation pour UIAlertController
Par exemple:
UIAlertController * searchActionSheet=[UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
[ searchActionSheet.view setBounds:CGRectMake(7, 180, self.view.frame.size.width, 470)];
//yourView represent the view that contains UIPickerView and toolbar
[searchActionSheet.view addSubview:self.yourView];
[self presentViewController:searchActionSheet animated:YES completion:nil];
Il existe une solution prête à l'emploi avec exactement le même comportement - ActionSheetPicker-3.0
La version originale utilisait UIActionsheet
, mais avec la version iOS 8, je mets à niveau ce projet et je remplace UIActionsheet par une vue simple, mais l'animation et la vue sont exactement les mêmes.
J'ai aussi trouvé ce problème et j'ai une solution, j'espère qu'il peut vous aider ..
Vous pouvez télécharger l'exemple de code ici: https://www.dropbox.com/s/yrzq3hg66pjwjwn/UIPickerViewForIos8.zip?dl=
@interface ViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>{
UIView *maskView;
UIPickerView *_providerPickerView;
UIToolbar *_providerToolbar;
}
- (void) createPickerView {
maskView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[maskView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];
[self.view addSubview:maskView];
_providerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 344, self.view.bounds.size.width, 44)];
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissActionSheet:)];
_providerToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], done];
_providerToolbar.barStyle = UIBarStyleBlackOpaque;
[self.view addSubview:_providerToolbar];
_providerPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 300, 0, 0)];
_providerPickerView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5];
_providerPickerView.showsSelectionIndicator = YES;
_providerPickerView.dataSource = self;
_providerPickerView.delegate = self;
[self.view addSubview:_providerPickerView];
}
- (void)dismissActionSheet:(id)sender{
[maskView removeFromSuperview];
[_providerPickerView removeFromSuperview];
[_providerToolbar removeFromSuperview];
}
Cela ne montre rien car uiactionsheet & uiactionsheetdelegate est déconseillé est ios8 https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIActionSheet_Class/index.html
Vous devez utiliser UIAlertController dans ios 8.