Meu aplicativo requer que as seguintes coisas sejam adicionadas em uma folha de ação.
- UIToolbar
- Botão no UIToolbar
- Controle UIPicker
Eu incluí uma imagem para entender meus requisitos.
Você poderia explicar como isso pode ser implementado?
ios
iphone
uipickerview
actionsheetpicker
Sagar R. Kothari
fonte
fonte
Respostas:
Atualização para iOS 7
Documentos da Apple para UIActionSheet :
UIActionSheet is not designed to be subclassed, nor should you add views to its hierarchy
Eu recomendo não tentar personalizar o conteúdo de uma ActionSheet, pois isso pode levar a graves erros de contexto inválidos no iOS 7. Passei algumas horas trabalhando com esse problema e finalmente decidi adotar uma abordagem diferente. Substituí a chamada para mostrar a folha de ação por um controlador de exibição modal contendo uma simples visualização de tabela.
Existem muitas maneiras de conseguir isso. Aqui está uma maneira que acabei de implementar em um projeto atual. É bom porque eu posso reutilizá-lo entre 5 ou 6 telas diferentes, onde todos os usuários selecionam em uma lista de opções.
SimpleTableViewController
,.SimpleTableViewControllerDelegate
com um método necessárioitemSelectedatRow:
e uma propriedade fraca chamada delegado do tipoid<SimpleTableViewControllerDelegate>
. É assim que passaremos a seleção de volta ao controlador pai.itemSelectedatRow:
emtableView:didSelectRowAtIndexPath:
.Essa abordagem tem o benefício adicional de ser bastante reutilizável. Para usar, importe a classe SimpleTableViewController no seu ViewController.h, conheça o SimpleTableViewDelegate e implemente o
itemSelectedAtRow:
método Em seguida, para abrir o modal, instancie um novo SimpleTableViewController, defina os dados da tabela, delegue e apresente-os.Crio um exemplo simples e o publiquei no github .
Consulte também Mostrar a planilha de ações que causa erros de contexto inválidos do CGContext .
fonte
Mais uma solução:
nenhuma barra de ferramentas, mas um controle segmentado (ocular)
fonte
Embora essa pergunta seja antiga, mencionarei rapidamente que reuni uma classe ActionSheetPicker com uma função de conveniência, para que você possa gerar uma ActionSheet com um UIPickerView em uma linha. É baseado no código das respostas a esta pergunta.
Editar: agora também suporta o uso de um DatePicker e DistancePicker.
UPD:
Esta versão está obsoleta: use o ActionSheetPicker-3.0 .
fonte
ActionSheetDatePicker
modo, você pode adicionar vários botões à barra de ferramentas na parte superior. Isso é possível com apenas normalActionSheetStringPicker
também?Sim ! Eu finalmente o encontrei.
implemente o código a seguir no evento de clique no botão para exibir a folha de ação conforme indicado na imagem da pergunta.
fonte
A excelente solução de Marcio para essa pergunta foi de grande ajuda para adicionar subviews de qualquer tipo a um UIActionSheet.
Por razões que ainda não estão totalmente claras para mim, os limites do UIActionSheet só podem ser definidos após a exibição; as soluções da sagar e da marcio resolvem isso com êxito com uma mensagem setBounds: CGRectMake (...) sendo enviada para a planilha de ações depois que ela é mostrada.
No entanto, a definição dos limites do UIActionSheet após a exibição da folha cria uma transição irregular quando o ActionSheet é exibido, onde "aparece" na exibição e, em seguida, rola apenas os 40 pixels finais.
Ao dimensionar um UIPickerView após adicionar subvisões, recomendo agrupar a mensagem setBounds enviada para o actionSheet dentro de um bloco de animação. Isso tornará a entrada da actionSheet mais suave.
fonte
Para aqueles que estão tentando encontrar a função DatePickerDoneClick ... aqui está o código simples para descartar a folha de ação. Obviamente, aac deve ser um ivar (aquele que aparece no seu arquivo .h de implementação)
fonte
Eu realmente não entendo porque isso
UIPickerView
está acontecendoUIActionSheet
. Esta parece ser uma solução confusa e hacky, que pode ser quebrada em uma versão futura do iOS. (Eu já tive coisas como essa interrupção em um aplicativo antes, onde oUIPickerView
item não estava sendo apresentado na primeira torneira e tinha que ser repetido - peculiaridades estranhas com oUIActionSheet
).O que eu fiz foi simplesmente implementar um
UIPickerView
e, em seguida, adicioná-lo como uma subvisão à minha visão, e animá-lo subindo como se estivesse sendo apresentado como uma folha de ação.fonte
Para adicionar à incrível solução de marcio,
dismissActionSheet:
pode ser implementado da seguinte maneira.Adicione este método ao seu código.
fonte
Eu acho que essa é a melhor maneira de fazer isso.
ActionSheetPicker-3.0
É praticamente o que todo mundo sugere, mas usa blocos, o que é um toque legal!
fonte
Desde o iOS 8, você não pode, ele não funciona porque a Apple mudou a implementação interna do
UIActionSheet
. Consulte a documentação da Apple :fonte
Gostei da abordagem adotada por Wayfarer e pela flexaddicted, mas descobri (como aZtral) que não funcionava, pois o backgroundTapButton era o único elemento que respondia à interação do usuário. Isso me levou a colocar todas as três subvisões dele: _picker, _pickerToolbar e backgroundTapButton dentro de uma exibição contendo (pop-up) que foi animada dentro e fora da tela. Eu também precisava de um botão Cancelar na barra de ferramentas _picker. Aqui estão os elementos de código relevantes para a exibição pop-up (você precisa fornecer sua própria fonte de dados do selecionador e métodos de delegação).
fonte