Cambiar la image del button trasero del ViewController para todas las pantallas

Tengo este código a continuación que cambia la image del button de retroceso en la siguiente pantalla.

Tengo 30 pantallas en mi aplicación y quiero que el button de retroceso sea el mismo en todas las 30 pantallas. ¿Es posible que no copie este código en las 30 pantallas y simplemente lo escriba una vez y más bien lo reutilice en 30 pantallas.

Además, el código adjunto con el button Atrás debería funcionar bien en todas las pantallas cuando lo reutilice

Estoy usando iOS 8 y Xcode 6.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let backButtonImage: UIImage = UIImage(named: "back")! var backBarItem: UIBarButtonItem = UIBarButtonItem(image: backButtonImage, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("method")) segue.destinationViewController.navigationItem.leftBarButtonItem = backBarItem; } func method() { self.navigationController?.popViewControllerAnimated(true) } 

No estoy muy seguro de qué es lo que querías, así que responderé la mayor parte de lo que creo que podrías desear por tu bien y cualquiera que lo vea en el futuro.

Primero: desea un button de retroceso similar a los de las aplicaciones de Apple pnetworkingeterminadas. Para hacerlo, necesita a) get una reference a la escena de destino y su controller de vista. Supondré que lo ha hecho y lo establecerá como controller para reference futura. b) Necesita configurar el elemento del button de la barra izquierda. Configurarlo con:

 controller.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Insert Title Here!!", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

Coloque todo esto en prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) (También encontrará la escena de destino con esto, probablemente con segue.destinationViewController

Segundo: desea usar una image llamada "Atrás" para todos los elementos. Si es así, repita el paso a) anterior e inserte este útil código:

 UIBarButtonItem(image: "Back", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

También sé que no quieres copyrlo, pero no es como si esta computadora fuera intensa de todos modos y probablemente sea la más simple.

Tercero: Eres inteligente y no odias los avances en la progtwigción, así que quieres usar un storyboard. Si es así, simplemente arrastre en una barra de navigation desde el menu de objects, agregue un elemento de navigation y cópielo a todas sus escenas. Si tus escenas están vinculadas a classs personalizadas, entonces buenas noticias para pasar el IBAction súper feliz, simplemente puedes vincular el elemento de navigation a tu class personalizada a través de una IBAction y usar esa function para hacer toda la encoding elegante que tu corazón pueda desear.

Cuarto: Realmente, realmente no quieres copyr nada, incluso si no es tan difícil. Si es así, puede subclasificar un UIViewController con su propia class personalizada, agregar el código que mencioné anteriormente y luego subclasificar todas sus futuras classs de UIView como tal. Para ser honesto, no estoy completamente seguro de que esto funcione y parezca innecesariamente laborioso, pero depende de usted.

Estoy un poco cansado en este momento, así que lo siento por todas las cosas que me parecen graciosas, pero espero haber ayudado, y por favor dime si perdí tu punto por completo y puedo tratar de pensar en una solución.

Para cambiar en general la apariencia de UI-Elements en iOS, observe UIAppearance . De esta forma, puedes configurarlo una vez y estará en todas partes en tu aplicación.

Recomendaría configurarlo en la application:didFinishLaunchingWithOptions: AppDelegate application:didFinishLaunchingWithOptions:

Prueba esto:

 let backImg: UIImage = UIImage(named: "back")! UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default) 

Solo tengo un controller de navigation en mi aplicación, por lo que esto puede o no ser útil. Pero, he creado una subclass de UINavigationController. Entonces, en esta subclass, anulo el método pushViewController:

 override func pushViewController(_ viewController: UIViewController, animated: Bool) { let pushingVC = viewControllers[viewControllers.count - 1] let backItem = UIBarButtonItem() backItem.title = "" pushingVC.navigationItem.backBarButtonItem = backItem super.pushViewController(viewController, animated: animated) } 

Esto hace que cada vez que se ejecute un viewController, desde my customNavigationController, utilice el button de retroceso personalizado para cada vista. Debe asegurarse de cambiar su tipo de UINavigationControllers a su subclass personalizada. Pero, esto funciona para mí en Swift 3.0.