Red de conocimiento informático - Problemas con los teléfonos móviles - La diferencia entre pushViewController y presentViewController

La diferencia entre pushViewController y presentViewController

presentModalViewController, presentViewController y pushViewController se pueden usar para actualizar la interfaz, pero existen ciertas diferencias entre ellos.

1.presentModalViewController y presentViewController

Primero, hablemos de la diferencia entre presentModalViewController y presentViewController: desde iOS6, presentModalViewController y presentViewController son iguales. presentModalViewController ha quedado obsoleto en favor de presentViewController.

2. presentViewController y pushViewController

Ahora, hablemos de la diferencia entre presentViewController y pushViewController. Primero, el código fuente para llamarlos es:

[self.navigationController pushViewController:(nonnull UIViewController *) animados:(BOOL)] // Llamar a pushViewController

[self presentViewController: ( UIViewController no nulo *) animado: (BOOL) finalización: ^ (void) finalización]; // Llama a pushViewController

Como puedes ver en el código fuente, pushViewController actúa sobre NavigationController. Es decir, si desea utilizar pushViewController para saltar a la interfaz, debe asegurarse de que la página actual tenga un NavigationController. En cuanto a presentViewController, no tiene tal limitación y se puede usar cuando la página actual no tiene una barra de navegación.

Además, pushViewController insertará una vista en la pila y la mostrará, lo que facilita encontrar la vista anterior y volver a cualquier vista anterior. Mientras que presentViewController mostrará una vista directamente, por lo que solo podrá volver a la vista anterior cada vez.

Entre navegaciones que han estado usando pushViewController, una vez que se usa presentViewController, el NavigationController de la interfaz actual quedará vacío y pushViewController no podrá usarlo. Si desea volver a utilizar pushViewController, debe restablecer NavigationController. Sin embargo, en este caso la vista actual se convertirá en rootViewController y no se encontrará la vista anterior en la cadena de navegación.

PushViewController y presentViewController devuelven el método de vista anterior:

[self.navigationController popToViewController:(nonnull UIViewController *) animados:(BOOL)];//pushViewController devuelve

[self dismissViewControllerAnimated:(BOOL) finalización:^(void) finalización];//presentViewController devuelve