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

Foi útil?

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:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top