Subview uitextfield do uabableViewCell para se tornar um socorrista?
-
27-09-2019 - |
Pergunta
Eu tenho um aplicativo de dados principal que usa um controlador de navegação para perfurar uma visualização detalhada e, se você editar uma das linhas de dados nos detalhes que você será levado para uma visualização de edição para essa linha única, como em maçãs coredatabooks Exemplo (exceto Coredatabooks, usa apenas um UITextField
por si só, não aquele que é uma subjeca de UITableViewCell
como o meu)!
A visão de edição é uma UITableviewController
que cria sua tabela com uma única linha de seção e uma única UITextfield
na célula, programaticamente.
O que eu quero que aconteça é quando você seleciona uma linha para editar e a visualização Editar é empurrada para a pilha de navegação e a visualização de edição é animada se movendo pela tela, quero que o campo de texto seja selecionado como Firstronder para que o teclado já esteja aparecendo À medida que a visualização se move através da tela para assumir a posição. Como no aplicativo de contatos ou no aplicativo Coredatabooks.
Atualmente, tenho o seguinte código no meu aplicativo, o que faz com que a visualização seja carregada e você vê o teclado aparecer (o que não é o que eu quero, quero que o teclado já esteja lá)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
Você não pode colocar isso em -viewWillAppear
Como o campo de texto ainda não foi criado theTextField
é nulo. No aplicativo CORORETATABOOKS, onde eles alcançam o que eu quero, eles carregam sua visão de uma ponta, para que usem o mesmo código, mas em -viewWillAppear
Como o campo de texto já foi criado!
Existe alguma maneira de contornar isso sem criar uma ponta, quero manter a implementação programada para permitir maior flexibilidade.
Muito obrigado
Solução
Depois de falar com a equipe de suporte do Apple Dev, tenho uma resposta!
O que você precisa fazer é criar uma tela fora da tela UITextField
dentro -(void)loadView;
e então defina -o como primeiro respondedor e depois no viewDidLoad
Método você pode definir o UITextField
no UITableViewCell
ser um socorrista. Aqui está algum código de exemplo (lembre -se de que estou fazendo isso em um UITableViewController
Então, eu também estou criando o TableView!
- (void)loadView
{
[super loadView];
//Set the view up.
UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = theView;
[theView release];
//Create an negatively sized or offscreen textfield
UITextField *hiddenField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, -10, -10)];
hiddenTextField = hiddenField;
[self.view addSubview:hiddenTextField];
[hiddenField release];
//Create the tableview
UITableView *theTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStyleGrouped];
theTableView.delegate = self;
theTableView.dataSource = self;
[self.view addSubview:theTableView];
[theTableView release];
//Set the hiddenTextField to become first responder
[hiddenTextField becomeFirstResponder];
//Background for a grouped tableview
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Now the the UITableViewCells UITextField has loaded you can set that as first responder
[theTextField becomeFirstResponder];
}
Espero que isso ajude alguém a preso na mesma posição que eu!
Se alguém mais puder ver uma maneira melhor de fazer isso, diga.
Outras dicas
Tente fazer isso no método ViewDidappear, funciona para mim.
Eu acho que a solução óbvia é criar o campo de texto no init
Método do controlador de exibição. Geralmente, é aí que você configura a visualização porque um controlador de exibição exige uma propriedade de exibição povoada.
Então você pode definir o campo de texto como socorrista em viewWillAppear
e o teclado deve ser visível à medida que a visualização desliza.
Você já tentou usar os métodos UinavigationController Delegate?:
NavigationController: WillSowViewController: animado: