web-dev-qa-db-fra.com

Ajuster un UIDatePicker dans une UIActionSheet

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.

37
Coocoo4Cocoa

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.

44
thbonk

Essayez d'ajouter la ligne suivante pour résoudre le problème des boutons désactivés

[menu sendSubviewToBack:pickerView];
18
Ajay Sawant

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];  
17
Jakob Egger

Ç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!

8
Oscar Peli

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];  
7
Dmitry

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];

4
Stefan

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.


Mettre à jour:

Cette version est obsolète: utilisez plutôt ActionSheetPicker-3. .

3
mts