Estou tentando fazer isso há alguns dias e, depois de ler muitas mensagens de pessoas que tentam fazer isso também, ainda não consigo ter um trabalho completo UITextField
em algumas das minhas UITableViewCells
, como neste exemplo:
Ou tenho o formulário funcionando, mas o texto não está visível (embora eu defina sua cor para azul), o teclado entra em campo quando clico nele e não consegui implementar corretamente os eventos do teclado. Tentei com vários exemplos da Apple (principalmente UICatalog
, onde existe um controle semelhante), mas ainda não está funcionando corretamente.
Alguém pode me ajudar (e todas as pessoas que tentam realizar esse controle) e postar uma implementação simples de a UITextField
em a UITableViewCell
, que funciona bem?
ios
objective-c
uitableview
cocoa-touch
uitextfield
Mathieu
fonte
fonte
CGRectMake(A_MAGIC_NUMBER, ANOTHER_MAGIC_NUMBER, YET_ANOTHER_HARDCODED_MAGIC_NUMBER, OH_HERES_ANOTHER_MYSTERIOUS_HARDCODED_MAGIC_NUMBER)
? De onde vêm esses números?Respostas:
Experimente isso. Funciona como um encanto para mim (em dispositivos iPhone). Eu usei esse código para uma tela de login uma vez. Eu configurei a exibição de tabela para ter duas seções. É claro que você pode se livrar dos condicionais da seção.
O resultado fica assim:
fonte
[_field addTarget:self action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
.[cell addSubview:playerTextField];
para que ele funcione com o iOS 5.0 ou superior.Aqui está uma solução que fica bem em iOS6 / 7/8/9 .
Atualização 2016-06-10: isso ainda funciona com o iOS 9.3.3
Obrigado por todo o seu apoio, agora está no CocoaPods / Carthage / SPM em https://github.com/fulldecent/FDTextFieldTableViewCell
Basicamente, pegamos o estoque
UITableViewCellStyleValue1
e grampeamosUITextField
ondedetailTextLabel
deveria estar. Isso nos permite colocar automaticamente todos os cenários: iOS6 / 7/8/9, iPhone / iPad, Imagem / Sem imagem, Acessório / Sem acessório, Retrato / Paisagem, 1x / 2x / 3x.Nota: isso está usando o storyboard com uma
UITableViewCellStyleValue1
célula de tipo chamada "word".fonte
UITableViewCellStyleRightDetail
assimUITableViewCellStyleValue1
?Aqui está como eu consegui isso:
TextFormCell.h
TextFormCell.m
Pode parecer um pouco detalhado, mas funciona!
Não se esqueça de definir o delegado!
fonte
Tente este. Ele também pode manipular a rolagem e você pode reutilizar as células sem o incômodo de remover as subvisões adicionadas anteriormente.
fonte
Isso não deve ser difícil. Ao criar uma célula para sua tabela, adicione um objeto UITextField à exibição de conteúdo da célula
Defina o delegado do UITextField como self (ou seja, seu viewcontroller) Dê uma marca ao campo de texto para que você possa identificar qual campo de texto foi editado nos seus métodos de delegação. O teclado deve aparecer quando o usuário tocar no campo de texto. Eu consegui funcionar assim. Espero que ajude.
fonte
CGRectZero
como um quadro, certifique-se de configurar o quadro do campo de texto antes de adicioná-lo à hierarquia de exibição. Obter aframe
propriedade da exibição de conteúdo da célula é especialmente útil para essa tarefa.Detalhes
Código de amostra completo
Resultado
fonte
Eu estava evitando isso chamando um método para executar
[cell.contentView bringSubviewToFront:textField]
sempre que minhas células apareciam, mas então descobri esta técnica relativamente simples:Parece não ter o mesmo problema de excesso de histórico e se alinha por si próprio (um pouco). Além disso, o textLabel é truncado automaticamente para evitar transbordamento (ou abaixo), o que é útil.
fonte
Eu tive o mesmo problema. Parece que a configuração da
cell.textlabel.text
propriedade leva o UILabel à frente do contentView da célula. Adicione o textView após a configuraçãotextLabel.text
ou (se isso não for possível) chame isso:fonte
Eu realmente lutei com essa tarefa no iPad, com os campos de texto aparecendo invisíveis no UITableView e a linha inteira ficando azul quando fica em foco.
O que funcionou para mim no final foi a técnica descrita em "A técnica para o conteúdo de linha estática" no Guia de programação de exibição de tabela da Apple . Coloquei o rótulo e o textField em um UITableViewCell no NIB para a visualização e puxei a célula para fora através de uma tomada
cellForRowAtIndexPath:
. O código resultante é muito mais limpo que o UICatalog.fonte
Aqui está como é feito, eu acredito da maneira correta. Funciona no Ipad e no Iphone enquanto eu o testei. Temos que criar nossas próprias customCells classificando uma célula uitableview:
comece no interfaceBuilder ... crie um novo UIViewcontroller chamado customCell (voluntário para um xib enquanto você estiver lá) Verifique se customCell é uma subclasse de uitableviewcell
apague todas as visualizações agora e crie uma visualização para torná-la do tamanho de uma célula individual. faça com que essa subclasse de visualização seja personalizada. agora crie duas outras visualizações (duplique a primeira).
Vá para o inspetor de conexões e encontre 2 IBOutlets que você pode conectar a essas visualizações agora.
-backgroundView -SelectedBackground
conecte-os às duas últimas visualizações que você acabou de duplicar e não se preocupe com elas. a primeira visualização que estende o customCell, coloque seu rótulo e o campo de texto dentro dele. entrou no customCell.he conecte seu rótulo e campo de texto. Defina a altura dessa visualização como 75 (altura de cada célula) concluída.
No seu arquivo customCell.m, verifique se o construtor se parece com isso:
Agora crie um UITableViewcontroller e, neste método, use a classe customCell como esta:
}
fonte
Aqui está uma subclasse drop-in para a
UITableViewCell
qual substitui o detailTextLabel por um editávelUITextField
(ou, no caso deUITableViewCellStyleDefault
, substitui o textLabel ). Isso tem o benefício de permitir reutilizar todos os UITableViewCellStyles, accessViews, etc familiares, agora os detalhes são editáveis!Simples de usar - basta criar sua célula como antes, mas agora use cell.textField em vez de cell.detailTextLabel (ou cell.textLabel no caso de
UITableViewCellStyleDefault
). por exemploInspirada e melhorada pela resposta de FD
fonte
Para os próximos eventos de retorno / retorno em vários campos UIText dentro de UITableViewCell nesse método, eu levei UITextField no storyboard.
Para pegar o texto do campo de texto-
fonte