J'essaie d'obtenir un UIDatePicker avec un UIButton pour apparaître dans une UIActionSheet. Malheureusement, il est rogné et l'ensemble du sélecteur de date n'est pas visible. Je n'ai même pas encore essayé d'ajouter l'UIButton. Quelqu'un peut-il suggérer que la vue entière s'adapte correctement? Je ne sais pas comment ajouter les dimensions appropriées car UIActionSheet semble ne pas avoir de -initWithFrame:
constructeur de type.
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];
[pickerView release];
[menu release];
J'ai également essayé avec quelque chose de similaire à:
UIActionSheet *menu = [[UIActionSheet alloc] initWithFrame:CGRectMake(200.0, 200.0, 100.0f, 100.0f)];
Les coords ne sont bien sûr pas réalistes, mais ils ne semblent pas affecter la position/taille de la feuille UIActionSheet.
Vous pouvez utiliser quelque chose comme ça (ajuster les coordonnées):
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];
[menu setBounds:CGRectMake(0,0,320, 500)];
CGRect pickerRect = pickerView.bounds;
pickerRect.Origin.y = -100;
pickerView.bounds = pickerRect;
[pickerView release];
[menu release];
Mais vous feriez mieux de créer une vue plein écran avec un UIDatePicker et une barre de navigation. Pour un exemple, voir UICatalog -> échantillon Pickers de l'iPhone DevCenter.
Essayez d'ajouter la ligne suivante pour résoudre le problème des boutons désactivés
[menu sendSubviewToBack:pickerView];
La réponse de Dmitry est presque correcte. Cependant, le cadre de la feuille d'actions est trop petit et par conséquent les contacts près du bas du sélecteur sont ignorés. J'ai corrigé ces problèmes:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"OK",nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeTime;
[menu addSubview:pickerView];
[menu showInView:_mainView];
CGRect menuRect = menu.frame;
CGFloat orgHeight = menuRect.size.height;
menuRect.Origin.y -= 214; //height of picker
menuRect.size.height = orgHeight+214;
menu.frame = menuRect;
CGRect pickerRect = pickerView.frame;
pickerRect.Origin.y = orgHeight;
pickerView.frame = pickerRect;
[pickerView release];
[menu release];
Ça marche pour moi
NSString *title = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation) ? @"\n\n\n\n\n\n\n\n\n" : @"\n\n\n\n\n\n\n\n\n\n\n\n" ;
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:[NSString stringWithFormat:@"%@%@", title, NSLocalizedString(@"SelectADateKey", @"")]
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Ok", nil];
[actionSheet showInView:self.view];
UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease];
datePicker.datePickerMode = UIDatePickerModeDate;
[actionSheet addSubview:datePicker];
un peu délicat mais ça marche!
Boutons en haut, sélecteur en bas:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"OK",nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeTime;
[menu addSubview:pickerView];
[menu showInView:_mainView];
CGRect menuRect = menu.frame;
menuRect.Origin.y -= 214;
menuRect.size.height = 300;
menu.frame = menuRect;
CGRect pickerRect = pickerView.frame;
pickerRect.Origin.y = 174;
pickerView.frame = pickerRect;
[pickerView release];
[menu release];
Assurez-vous d'afficher la feuille UIActionSheet dans la vue de droite à l'intérieur d'un UITabBarController pour éviter les problèmes d'interactivité en bas:
[actionSheet showInView:self.parentViewController.tabBarController.view];
Peut-être ne répondant pas directement à la question spécifique (comment obtenir l'UIDatePicker pour s'adapter), mais pour une implémentation de UIActionSheet qui présente un UIDatePicker (aussi d'autres), veuillez voir ActionSheetPicker . De son Readme:
Présentez facilement une ActionSheet avec un PickerView, permettant à l'utilisateur de choisir parmi un certain nombre d'options immuables. Basé sur l'alternative déroulante HTML trouvée dans mobilesafari.
Aussi:
Du code dérivé de la publication de marcio sur Stack Overflow [ Ajouter UIPickerView et un bouton dans la feuille d'action - Comment? ]
Même si l'on n'utilise pas le code, c'est une bonne lecture avant de lancer le vôtre.
Cette version est obsolète: utilisez plutôt ActionSheetPicker-3. .