ios - bar - swift 4 change back button text
Cambiar UINavigationBar título del botón atrás (9)
En mi aplicación, quiero utilizar el texto ''Atrás'' como título del botón de retroceso para cada controlador de vista. He leído tantas publicaciones en stackoverflow pero no obtuve nada.
No quiero configurar el botón de la barra izquierda.
¿Alguien puede ayudarme en esta simple tarea?
Gracias,
Haga esto en el controlador de vista principal no en el secundario
Rápido
navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
Objetivo-C
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Necesitaba usar self.navigationController.navigationBar.backItem.title = @"";
, la diferencia es que estoy usando backItem
lugar de topItem
.
Para eliminar el título del botón Atrás para todos los controles de vista, agregue un nuevo archivo rápido y copie esta extinción a él
import UIKit
extension UIViewController {
static func swizzle(){
let orginalSelector = #selector(viewDidLoad)
let swizzledSelector = #selector(swizzledViewDidLoad)
let orginalMethod = class_getInstanceMethod(UIViewController.self, orginalSelector)
let swizzledMethod = class_getInstanceMethod(UIViewController.self, #selector(swizzledViewDidLoad))
let didAddMethod = class_addMethod(UIViewController.self, orginalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
if didAddMethod {
class_replaceMethod(UIViewController.self, swizzledSelector, method_getImplementation(orginalMethod!), method_getTypeEncoding(orginalMethod!))
}else{
method_exchangeImplementations(orginalMethod!, swizzledMethod!)
}
}
@objc func swizzledViewDidLoad(){
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
swizzledViewDidLoad()
}
}
después de eso, en AppDelegate dentro de didFinishLaunchingWithOptions, llama al func swizzle.
UIViewController.swizzle()
este func usa el tiempo de ejecución objetivo para intercambiar el método viewDidLoad
por otro que elimina el título del botón de retroceso y luego dentro de él recuperar el viewDidLoad
original
Prueba esta esperanza sera trabajo
UIBarButtonItem *btn =
[[UIBarButtonItem alloc] initWithTitle:@"New Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[[self navigationItem] setBackBarButtonItem:btn];
Si está utilizando el guión gráfico, puede seleccionar el elemento de navegación en el controlador de vista principal y establecer el texto del botón que desea en el campo " Botón de retroceso ". Recuerde configurar esto en el controlador de vista principal , no en el elemento secundario que se inserta.
en AppDelegate
en DidFinishLaunchingWithOptions
agregue este código:
[[UIBarButtonItem appearance]
setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000.0, 0.0)
forBarMetrics:UIBarMetricsDefault];
Swift 2.0:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.topItem?.title = ""
}
Nota: Solo funciona si el guión gráfico tiene una cadena de pila de navegación.
Otras opciones / cambio de título:
self.navigationController?.navigationBar.backItem?.title = ""
navigationItem.backBarButtonItem?.title = ""
navigationItem.leftBarButtonItem?.title = ""
Eliminando navigationItem:
navigationItem.setLeftBarButtonItem(nil, animated: true)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
self.navigationController.navigationBar.topItem.title = @"";