Cómo añadir un botón cuando el controlador de vista se sustituye en su aplicación para ios

Debido a que es posible que se sustituye el controlador de vista de su aplicación para iOS por uno nuevo - aunque uno de la misma clase base - el nuevo controlador de vista no tiene acceso al botón que necesita para mostrar o el popover tiene que descartar. Afortunadamente, la gente de Apple te ofrecen un lugar perfecto para hacerlo.

Cuando se activa un segue - lo que se hace cuando se toca una entrada de la tabla - pero antes de que el nuevo controlador desliza su punto de vista en su lugar, el tiempo de ejecución del guión gráfico llama al controlador de vista actual&rsquo-s método de modo que puede pasar datos al controlador de vista que está a punto de ser visualizada.

Eso significa que usted puede pasar la información de botón en el nuevo controlador de vista antes de que incluso se puso en marcha. Entonces, prepareForSegue: remitente:, será tanto asignar el botón que se utilizará en viewDidLoad y descartar el controlador de vista también.

prepareForSegue: remitente: es un método de controlador de vista que notifica a un controlador de vista de que un segue está a punto de realizar. segue es el UIStoryboadSegue objeto, y contiene información sobre los controladores de vista implicados en el segue.

Aunque la aplicación por defecto de este método no hace nada,UIViewController subclases pueden anular y pasar los datos al controlador de vista que está a punto de ser visualizada. los segue objeto tiene propiedades que apuntan al controlador de vista de origen, así como el controlador de vista de destino. El segue es el único objeto que sabe simultáneamente alrededor de la fuente y los controladores de vista de destino.

remitente es el objeto que causó la segue, pero usted ganó&rsquo-t necesidad de utilizar aquí.

Se agrega el código para la prepareForSegue: remitente: Método para hacer la DestinationController el UISplitViewController delegar y asignar el popOverButton y masterPopoverController propiedades.

Tú&rsquo-LL también descartar el popover cuando está presente para que el usuario doesn&rsquo-t tiene que tocar en el fin de deshacerse de él.

Para hacer todo eso, añadir este código a MasterViewController.m.

- (Void) prepareForSegue: (UIStoryboardSegue *) segue remitente: (id) {if emisor ([[UIDevice currentDevice]] == userInterfaceIdiom UIUserInterfaceIdiomPad) {* DetailViewController currentDetailViewController-if [[] self.splitViewController.viewControllerslastObject isKindOfClass (: [clase UINavigationController ]]) currentDetailViewController = (DetailViewController *) ((UINavigationController *) [self.splitViewController.viewControllerslastObject]) topViewController-elsecurrentDetailViewController = [self.splitViewController.viewControllerslastObject] -si (currentDetailViewController.masterPopoverController = nil) [currentDetailViewController.masterPopoverControllerdismissPopoverAnimated:.! SI ] -DetailViewController * destinationDetailViewController-Si ([segue.destinationViewControllerisKindOfClass: [UINavigationController clase]]) destinationDetailViewController = (DetailViewController *) ((UINavigationController *) segue.destinationViewController) .topViewController-elsedestinationDetailViewController = segue.destination ViewController-self.splitViewController.delegate = destinationDetailViewCon Troller-destinationDetailViewController.popOverButton = currentDetailViewController.popOverButton-destinationDetailViewController.masterPopoverController = currentDetailViewController.masterPopoverController-}}

Se empieza por la búsqueda de la corriente del controlador Detallado porque tiene las propiedades del botón y popover necesita el nuevo controlador de vista.

Este código aparece más complicado de lo que es. Primero se comprueba para ver si&rsquo-re corriendo en un iPad. Si es así, se obtiene la corriente controlador Detallado accediendo a la lista de controladores de vista de la splitViewController&rsquo-s viewController formación. Afortunadamente, la UIViewController clase tiene una splitViewController propiedad para hacer que sea fácil para usted.

A continuación, comprobar para ver si un controlador de navegación se encuentra en la viewControllers matriz y, si uno está allí, se obtiene el controlador de navegación&rsquo-s topViewController (El controlador de vista actual) - si no, basta con utilizar el controlador de la matriz. (Tú&rsquo-notará una gran cantidad de colada pasando aquí)

si ([[self.splitViewController.viewControllers &# X2028-LastObject]
isKindOfClass: [UINavigationController &# X2028 clase]])
currentDetailViewController = (RTDetailViewController *)
(UINavigationController *)
[self.splitViewController.viewControllers
LastObject]). topViewController- demás
currentDetailViewController = &# x2028- [self.splitViewController.viewControllers
LastObject] -

A continuación, si usted ve un popover, desea descartarla. Se comprueba para ver si un controlador popover (que&rsquo-s por qué tuvo que hacer que la propiedad accesible moviéndolo en el archivo de cabecera.

Video: ¿Cómo instalar uber partner en el Iphone?

si (currentDetailViewController.masterPopoverController 
!= Nil)
[currentDetailViewController.masterPopoverController
dismissPopoverAnimated: SÍ] -

A continuación, se encuentra el nuevo controlador de destino (el que realiza la migración a) utilizando una lógica similar a la lógica que utilizó para encontrar el actual controlador de vista de detalles.

Video: IPHONE BOTON HOME VIRTUAL IPHONE 3 3GS 4 4S 5 5S 5C 6 6S CON iOS 5 EN ADELANTE 2016

si ([segue.destinationViewController 
&# X2028-isKindOfClass: [UINavigationController
clase]]) destinationDetailViewController =
(DetailViewController *) ((UINavigationController *)
segue.destinationViewController) .topViewController- demás
destinationDetailViewController =
segue.destinationViewController-

Entonces sólo tiene que establecer el delegado Dividir vista controlador al nuevo controlador de vista, por lo que obtendrá el splitViewConTroller: willHideViewController:withBarButtonItem: forPopoverController: y splitViewController: willShowViewController: invalidatingBarButtonItem: mensajes.

self.splitViewController.delegate = destinationDetailViewController-

Finalmente, se asigna el popOverButton y masterPopOverController propiedades en el nuevo controlador de vista.

destinationDetailViewController.popOverButton = 
currentDetailViewController.popOverButton-
destinationDetailViewController.masterPopoverController =
currentDetailViewController.masterPopoverController-

Es cierto que esto simplemente descarta la popover y asigna las propiedades, pero doesn&rsquo-t hacer nada para mostrar el botón. Que realmente se hace en viewDidLoad.

También puede especificar el tamaño de la ventana popover mediante la asignación de un valor a la prefferedContentSize propiedad. Debe tener en cuenta que el tamaño real puede ser reducido de manera que el popover encaja en la pantalla y que el popover no se solapa con un teclado cuando se presenta un teclado. Se puede ver el código que hace que en el MasterViewController &rsquo-s awakeFromNib método.

- (Void) {if awakeFromNib ([[UIDevice currentDevice] 
userInterfaceIdiom] == UIUserInterfaceIdiomPad)
&# X2028- {self.clearsSelectionOnViewWillAppear = NO-
self.preferredContentSize = CGSizeMake
(320.0, 600.0) -} [súper awakeFromNib] -}

los awakeFromNib mensaje se envía a un objeto que ha sido instanciado de un guión después de que todos los objetos se han cargado e inicializado. Cuando se envía el mensaje, se han establecido todas sus conexiones de salida y de acción.

Si decide hacer caso omiso de los consejos aquí y Don&rsquo-t despedir el controlador popover, grifos fuera de la ventana popover hará que el popover a ser desestimado. Puede, sin embargo, permitir al usuario interactuar con los puntos de vista determinados y no descartar el popover, utilizando el passthroughViews propiedad (aunque usted ganó&rsquo-t estar haciendo eso aquí). Tú&rsquo-d continuación, tendrá que descartar el popover mismo.

Artículos Relacionados