Colocar um UIDatePicker em uma UIActionSheet

Eu estou tentando obter um UIDatePicker com um UIButton para aparecer em um UIActionSheet. Infelizmente, ele é cortado e todo o Seletor de Data não fica visível. Eu nem sequer tentei adicionar o UIButton ainda. Alguém pode sugerir que toda a visão se ajuste corretamente? Não tenho certeza de como adicionar as dimensões adequadas, pois o UIActionSheet parece não ter um -initWithFrame: 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]; 

Eu também tentei com algo semelhante a:

 UIActionSheet *menu = [[UIActionSheet alloc] initWithFrame:CGRectMake(200.0, 200.0, 100.0f, 100.0f)]; 

As coordenadas são, é claro, não realistas, mas não parecem afetar a posição / tamanho da folha de cálculo UIA.

Você pode usar algo assim (ajuste as coordenadas):

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

Mas é melhor você criar uma exibição em canvas cheia com um UIDatePicker e uma barra de navegação. Para um exemplo, veja o exemplo do UICatalog -> Pickers do iPhone DevCenter.

Tente adicionar a seguinte linha para resolver o problema dos botões desativados

 [menu sendSubviewToBack:pickerView]; 

A resposta de Dmitry está quase correta. No entanto, o quadro da planilha é muito pequeno e, portanto, os toques perto da parte inferior do seletor são ignorados. Eu corrigi esses problemas:

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

Isso funciona para mim

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

um pouco complicado, mas funciona!

Botões no topo, selecionador no fundo:

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

Certifique-se de mostrar o UIActionSheet na visão correta quando dentro de um UITabBarController para evitar problemas de interatividade na parte inferior:

[actionSheet showInView:self.parentViewController.tabBarController.view];

Possivelmente, não respondendo diretamente a questão específica (como obter o UIDatePicker para caber), mas para uma implementação do UIActionSheet que apresenta um UIDatePicker (e também outros), consulte ActionSheetPicker . De seu Leiame:

Apresentar facilmente uma ActionSheet com um PickerView, permitindo que o usuário selecione entre várias opções imutáveis. Com base na alternativa suspensa HTML encontrada no mobilesafari.

Além disso:

Algum código derivado da postagem de marcio no Stack Overflow [ Adicionar UIPickerView e um botão na planilha Action – Como? ]

Mesmo que não se use o código, é uma boa leitura antes de você criar o seu.


Atualizar:

Esta versão foi preterida: use ActionSheetPicker-3.0 .