Não há botão "Concluído" no teclado numérico. Quando um usuário termina de inserir informações numéricas em um campo de texto, como faço para que o teclado numérico desapareça?
Eu poderia obter um botão "Concluído" usando o teclado padrão, mas os usuários teriam que mudar para as teclas numéricas para inserir números. Existe uma maneira de mostrar um botão "Concluído" no teclado numérico?
ios
iphone
user-input
Zhong frio
fonte
fonte
Aqui está uma adaptação para a resposta de Luda para Swift:
Na declaração da sua subclasse UIViewController, coloque
em ViewDidLoad colocar:
e adicione as funções hoopla e hoopla (fique à vontade para escolher outros nomes, basta alterar os nomes do seletor no ViewDidLoad de acordo
fonte
UIBarButtonItemStyle.Bordered
está obsoleto desde o iOS 8.0.UIBarButtonItemStyle.Plain
é sugerido em seu lugar.O truque que eu vi usado é criar um botão transparente personalizado do tamanho de toda a exibição e, em seu método de clique, fazer com que o campo de texto renuncie primeiro. Assim, o usuário pode clicar em qualquer lugar fora do campo para descartar o teclado.
fonte
Uma solução Swift 3 usando uma extensão. Ideal se você tiver vários
UITextField
objetos numéricos no seu aplicativo, pois oferece a flexibilidade de decidir, para cada umUITextField
, se uma ação personalizada deve ser executada quando Done ou Cancel for pressionado.Exemplo de uso usando as ações padrão:
Exemplo de uso usando uma ação Concluída personalizada :
fonte
Abaixo está uma revisão da resposta de Luda com as seguintes alterações:
a vista acessória é dimensionada automaticamente para a largura do quadro do aplicativo
a constante obsoleta
UIBarButtonItemStyleBordered
é evitadao botão "Concluído" é instanciado como
UIBarButtonSystemItemDone
Atualmente, o botão "Concluído" está centralizado na visualização de acessórios. Você pode posicioná-lo à esquerda ou à direita excluindo o espaço no lado pertinente.
Omiti o botão "Cancelar" porque o teclado padrão também não possui um. Se você deseja um botão "Cancelar", sugiro que você o instale como um
UIBarButtonSystemItemCancel
e verifique se não está descartando o valor original no seu campo de texto. O comportamento "Cancelar" implementado na resposta de Luda, que substitui o valor por uma sequência em branco, pode não ser o que você deseja.Para obter mais informações sobre como criar visualizações de acessórios, consulte a documentação da Apple sobre visualizações personalizadas para entrada de dados . Você provavelmente também desejará consultar as páginas de referência em UIToolbar e UIBarButtonItem .
fonte
[UIScreen mainScreen].applicationFrame
foi descontinuado no iOS 9. Use[UIScreen mainScreen].bounds
A solução em UIKeyboardTypeNumberPad e a tecla de retorno ausente funciona muito bem, mas apenas se não houver outros campos de texto que não sejam o número numérico na tela.
Peguei esse código e o transformei em um UIViewController, no qual você pode simplesmente subclasse para fazer o teclado numérico funcionar. Você precisará obter os ícones no link acima.
NumberPadViewController.h:
e NumberPadViewController.m:
Aproveitar.
fonte
Aqui está o código mais recente. Simplesmente inclua #import "UIViewController + NumPadReturn.h" no seu viewController.
Aqui está o .h
E eles
fonte
Uma solução muito mais fácil
fonte
Se você tiver vários campos numéricos, sugiro subclassificar UITextField para criar um NumericTextField que sempre exibe um teclado numérico com um botão concluído. Em seguida, basta associar seus campos numéricos a essa classe no Interface Builder e você não precisará de nenhum código adicional em nenhum dos seus View Controllers. A seguir, a classe Swift 3.0 que estou usando no Xcode 8.0.
Swift 4.2
fonte
Achei a resposta do @ user1258240 bastante concisa, pois isso não é tão simples quanto definir um
returnKeyType
propriedade.Só queria contribuir com minha própria abordagem "reutilizável" para isso:
fonte
SWIFT 3.0 Um sabor diferente, usando partes de algumas respostas anteriores.
fonte
Descrevo uma solução para iOS 4.2 ou superior aqui mas o botão de descartar desaparece após o teclado aparecer. Não é terrível, mas também não é o ideal.
A solução descrita na pergunta vinculada acima inclui uma ilusão mais elegante de descartar o botão, onde desboto e desloco verticalmente o botão para fornecer a aparência de que o teclado e o botão estão descartando juntos.
fonte
A maneira mais simples é:
Criar botão transparente personalizado e coloque-o no canto inferior esquerdo, que terá o mesmo
CGSize
espaço vazioUIKeyboardTypeNumberPad
. Alterne (mostrar / ocultar) este botão no campo de textobecomeFirstResponder
, clique no botão, respectivamente.fonte
Aqui está a solução mais simples que encontrei. Aprendi isso com o livro Beginning iOS 5 Development.
Supondo que o campo numérico seja chamado
numberField
.Em
ViewController
, adicione o seguinte método:Em
ViewController.m
, adicione o seguinte código:Volte ao
nib
arquivo.Utilities
Panela .Identity inspector
inferiorUtilities
panela de .View
(no arquivo da ponta) uma vez. Verifique se você não clicou em nenhum dos itens da exibição. Para fins de esclarecimento, você deve ver o UIViewClass
emIdentity inspector
.Connection Inspector
.Touch Down
e solte a seta noFile Owner
ícone. (FYI ... O ícone Proprietário do arquivo é exibido à esquerdaView
e aparece como um cubo oco com moldura amarela.)closeKeyboard
.Agora, quando você clicar em qualquer lugar no plano de fundo
View
, poderá descartar o teclado.Espero que isso ajude a resolver seu problema. :-)
fonte
Eu modifiquei a solução de Bryan para ser um pouco mais robusta, para que ela funcionasse bem com outros tipos de teclados que poderiam aparecer na mesma exibição. Está descrito aqui:
Criar um botão CONCLUÍDO na interface do usuário do teclado numérico do iOS
Eu tentaria explicá-lo aqui, mas a maioria é de código para olhar que não caberia facilmente aqui
fonte
Se você souber com antecedência o número de números a serem inseridos (por exemplo, um PIN de 4 dígitos), poderá ignorar automaticamente após 4 pressionamentos de tecla, conforme minha resposta a essa pergunta semelhante:
demitindo o teclado numérico
Não há necessidade de um botão pronto adicional neste caso.
fonte
Também podemos simplificar ainda mais a solução "o usuário tocou em outro lugar" , se apenas dissermos à visão do nosso view controller para terminar a edição:
... assumindo que "tocar em outro lugar dispensa o teclado" é o comportamento desejado para outros campos editáveis na exibição também.
fonte
Para o Swift 2.2, eu uso este
fonte
Todas essas implementações sobre como encontrar a visualização do teclado e adicionar o botão concluído na 3ª linha (é por isso que button.y = 163 b / c de altura do teclado é 216) são frágeis porque o iOS continua alterando a hierarquia da visualização. Por exemplo, nenhum dos códigos acima funciona para iOS9.
Eu acho que é mais seguro encontrar a visualização superior, por [[[UIApplication sharedApplication] windows] lastObject], e basta adicionar o botão no canto inferior esquerdo dela, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // modo retrato
fonte
Swift 2.2 / Eu usei a resposta de Dx_. No entanto, eu queria essa funcionalidade em todos os teclados. Então, na minha classe base, eu coloquei o código:
Em seguida, basta chamar addDoneButtonForTextFields em self.view.subviews em viewDidLoad (ou willDisplayCell se estiver usando uma exibição de tabela) para adicionar o botão Concluído a todos os teclados.
fonte