Pregunta

Tengo una aplicación de datos central que utiliza un controlador de navegación para desplazarse a una vista de detalle y luego si edita una de las filas de datos en la vista de detalle te llevan a una vista de edición para la línea única que, al igual Manzanas en CoreDataBooks ejemplo (excepto CoreDataBooks sólo se utiliza un UITextField por sí solo, ni uno solo que es una vista secundaria de UITableViewCell como la mía)!

La vista de edición es una UITableviewController que crea su tabla con una única sección única fila y una UITextfield en la célula, mediante programación.

Lo que quiero que suceda es cuando se selecciona una fila para editar y la vista de edición se inserta en la pila de navegación y la vista de edición está animado moviéndose por la pantalla, quiero que el campo de texto a ser seleccionado como firstResponder para que el teclado ya está mostrando como la vista se mueve por la pantalla para situar toma. Al igual que en la aplicación Contactos o en la App CoreDataBooks.

Actualmente tengo el siguiente código en mi aplicación que hace que el objeto de carga y entonces ver aparecer el teclado (que no es lo que yo quiero, yo quiero el teclado para que ya esté allí)

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [theTextField becomeFirstResponder];
}

No se puede poner esto en -viewWillAppear como el campo de texto no ha sido creada todavía por lo theTextField es nula. En la App CoreDataBooks donde lograr lo que quiero que se carguen su visión desde una punta así que utilizan el mismo código pero en -viewWillAppear como el campo de texto ya ha sido creada!

¿Hay alguna forma de conseguir alrededor de esto sin la creación de una punta, quiero seguir la aplicación programática para permitir una mayor flexibilidad.

Muchas gracias

¿Fue útil?

Solución

Después de hablar con el equipo de asistencia de Apple Dev, no tengo una respuesta!

Lo que hay que hacer es crear un UITextField fuera de la pantalla en -(void)loadView; y luego configurarlo como primer nivel de respuesta de entonces el método viewDidLoad puede establecer el UITextField en el UITableViewCell ser el primero en responder. Heres un código de ejemplo (recuerda que estoy haciendo esto en un UITableViewController por lo que estoy creando el tableview así!

- (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 esto ayude a atascado en la misma posición que yo!

Si alguien más puede ver una mejor manera de hacer esto por favor, por ejemplo.

Otros consejos

Trate de hacerlo en el método viewDidAppear, que funciona para mí.

creo que la solución obvia es crear el campo de texto en el método init del controlador de vista. Eso es por lo general cuando se configura el punto de vista porque un controlador de vista requiere una poblada propiedad vista.

A continuación, se puede establecer el campo de texto como primer nivel de respuesta en viewWillAppear y el teclado debe ser visible como la vista en diapositivas.

¿Ha intentado utilizar los métodos de delegado UINavigationController:?

navigationController: willShowViewController: animación:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top