xcode - puedo - control por boton iphone
Desconectar segue con el botón de navegación hacia atrás (4)
@Alan está en el camino correcto. Simplemente agregue una prueba para evitar que el segue se active cuando no regrese al primer controlador de vista. Algo como esto en viewWillDisappear te permitirá realizar la transición de desenrollar para un botón de retroceso. Deberá crear una secuencia de desenrollado manual arrastrando desde la clase hacia abajo hasta el ícono de salida. Asegúrese de nombrarlo después de crearlo.
UIViewController *vc = self.navigationController.topViewController;
if ([FirstViewController class] == [vc class])
{
[self performSegueWithIdentifier:@"unwindSegue" sender:self];
}
He visto el video demostrativo de Apple sobre la implementación del guión gráfico con la sección de segmenos de desenrollado y he visto la demostración usando botones personalizados en la vista principal. Eso funciona bien
También he visto un buen ejemplo de lo mismo aquí que también funciona. http://www.techotopia.com/index.php/Using_Xcode_Storyboarding_%28iOS_6%29#Unwinding_Storyboard_Segues
Sin embargo, deseo tener un intervalo de inserción normal pasando de principal (con datos de formulario principal) a secundario (con opciones de configuración avanzadas) y luego regresar al controlador de vista principal utilizando el botón Atrás en la barra de navegación en lugar de un botón personalizado en la vista como se muestra en la demostración. El controlador principal guardará todo en un servidor API cuando se presione un botón adicional para guardar en el controlador principal.
Parece que no puedo anular el botón de retroceso de navegación para apuntarlo a mi acción segue de desenrollar y dado que el botón Atrás no aparece en el guión gráfico, no puedo arrastrar el botón Salir verde a él.
Intenté esto en viewDidLoad para anular la acción, pero no funcionó [self.navigationItem.backBarButtonItem setAction: @selector (unwindSegueAction :)];
¿Es posible desenrollar una secuencia de empuje con el botón Atrás?
La mejor idea que tenía hasta ahora era anular el botón de retroceso del método viewDidLoad, pero eso elimina el estilo del botón de retroceso en ángulo y también parece ser un ataque brusco a un problema simple
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(unwindSegue:)];
Sé que hay respuestas para usar el protocolo y los delegados, pero estoy interesado en usar el método segue de desenrollado de Xcode4.5
Al final, no tuve que desenrollar el cambio ya que aún podía obtener una referencia a los métodos del controlador principal siguiendo el controlador de navegación.
Pude obtener una referencia haciendo lo siguiente en el - (void)viewWillDisappear:(BOOL)animated
método - (void)viewWillDisappear:(BOOL)animated
del controlador de niño
NSInteger currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];
FirstViewController *parent = (FirstViewController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex];
parent.barcodeType = indexPath.row;
que pasó perfectamente la variable de configuración al controlador original.
También agregué una referencia de importación al controlador principal en la parte superior del controlador de juegos infantiles
Me gustaría agregar una solución Swift que sigue la sugerencia de @Chuck H arriba:
let rootVC = self.navigationController!.topViewController
if rootVC.isKindOfClass(TheNameOfYourViewController) {
performSegueWithIdentifier("yourNamedSegueIdentifier", sender: self)
}
Una alternativa que quizás no haya considerado es hacer que el padre sea un delegado del niño y usar métodos de delegado en el niño para actualizar el padre.
De esta forma, omitiría la necesidad de agregar al desenrollado de navegación, porque el padre ya está actualizado en el momento en que devuelve el golpe.