ios swift swift2 xcode7

ios - Eliminar texto del botón Atrás manteniendo el icono



swift swift2 (20)

A veces no funciona cambiar solo el color del título, en caso de que el título sea largo. Porque podría desplazar el título de la barra de navegación hacia la izquierda. Por lo tanto, para evitarlo, es posible que deba desplazar el título del botón de la barra horizontalmente además de hacerlo transparente:

let barButtonItemAppearance = UIBarButtonItem.appearance() barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)

Quiero eliminar el texto del botón Atrás, pero quiero mantener el icono. Yo he tratado

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil) navigationItem.leftBarButtonItem = backButton

Sin embargo, esto elimina completamente el texto y el icono.


Debería seleccionar la barra de navegación del controlador DESDE el cual el botón Atrás apuntará y escribirá "" en el campo Botón Atrás.

por ejemplo, si está presionando el controlador A al controlador B, ponga espacios en blanco en la barra de navegación del controlador A.


El método de @ rmd2 es casi correcto, pero en su lugar, debe seleccionar la barra de navegación del controlador a la que apuntará el botón Atrás y escribirá " " en el campo Botón Atrás.


El texto del botón Atrás depende del título de la vista maestra.

El truco consiste en borrar el título si la vista maestra desaparece y configurarlo de nuevo si se muestra de nuevo:

override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) // needed to clear the text in the back navigation: self.navigationItem.title = " " } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "My Title" }


En Xcode 9.2 con Swift, funcionó así:

override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) }


En el caso de que no hayamos controlado el controlador de vista anterior (es decir, si estamos trabajando en un marco), podemos eliminar el título del botón Atrás de la siguiente manera:

// For iOS 10 navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = String() // For iOS 11 navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = nil

Lo que hace es navegar hasta el último elemento de la pila de navegación y eliminar su título posterior. Asegúrese de guardar el original cuando aparezca nuestro controlador de vista:

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) originalBackButtonTitle = navigationController?.navigationBar.items?.last?.backBarButtonItem?.title // Delete title somewhere here... }

y luego reasignarlo, para no interrumpir ninguna parte de la aplicación:

override func viewWillDisappear(_ animated: Bool) { navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle super.viewWillDisappear(animated) }


Finalmente encontré la solución perfecta.

Solo agregue una imagen transparente y agregue el siguiente código en su AppDelegate.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)


Para Swift 4+, coloque estas líneas en AppDelegate en didFinishLaunchingWithOptions

let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)


Para eliminar de todos los controladores de visualización en una pila de controlador de navegación:

Subclase UINavigationController y agregue esto:

override func show(_ vc: UIViewController, sender: Any?) { setEmptyBackButton(vc) super.show(vc, sender: sender) } override func pushViewController(_ viewController: UIViewController, animated: Bool) { setEmptyBackButton(viewController) super.pushViewController(viewController, animated: animated) } func setEmptyBackButton(_ viewController: UIViewController) { viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) }


Para mí esto hizo el truco:

override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) self.navigationItem.title = " " } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "my amazing title" navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil) }

Observe que si solo establece el título sin modificar el backBarButtonItem, parecerá que funciona. Pero si intenta retroceder con un gesto y luego cancelar y permanecer en el controlador de vista empujado, volverá el título posterior.

Trabajando en Swift 4


Ponga este código en cada VC que empuja a otro

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)


Resolví este problema agregando un "" en el título de StoryBoard del ViewController anterior. Solo un espacio, no vacío; D


Sé que esto ya tiene una respuesta, pero también puede hacerlo en código (en caso de que esté trabajando con puntas)

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

Agregue lo anterior en el primer controlador de vista.

Tenga en cuenta que debe hacer esto para cada controlador de vista que esté presionando. Entonces, si tiene 3 controladores de vista y desea eliminar el texto posterior de todos ellos, deberá agregar la línea en el controlador de vista 1 y 2.


Si desea eliminar el título de un botón de retroceso de un controlador de vista empujado, digamos <Settings a < en subSettingsViewController y luego debe configurar el título de BackBarButtonItem en el método ViewWillDisappear () de SettingsViewController.

C objetivo:

- (void)viewWillDisappear:(BOOL)animated [super viewWillDisappear:animated]; self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil]; }

Rápido:

override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) }


Si desea una flecha hacia atrás, siga el código que se coloca en el archivo AppDelegate en el método didFinishLaunchingWithOptions.

Para Swift

let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([.foregroundColor: UIColor.clear], for: .normal)


Si tiene un ViewControllerA y desea navegar al ViewControllerB, en el ViewControllerA, debe configurar el elemento de navegación actual con un nuevo UIBarButtonItem y el título en una cadena con espacio en blanco antes de presionar a otro controlador de vista:

Establezca el título en una cadena con un espacio en blanco, no puede establecer nil o "" (cadena vacía) porque el valor predeterminado es nil

let backItem = UIBarButtonItem() backItem.title = " " navigationItem.backBarButtonItem = backItem let controllerB = ViewControllerB() navigationController?.pushViewController(controllerB, animated: true)


Utilicé este código en la función didFinishLaunchingWithOptions de Appdelegate.

if #available(iOS 11, *) { UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .highlighted) } else { UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default) }


en veloz 4

self.navigationController?.navigationBar.topItem?.title = ""


En mi caso, para el icono y el título personalizados, esto sirvió para hacerlo (Swift 4)

let imgBack = UIImage(named: "ic_back") navigationController?.navigationBar.backIndicatorImage = imgBack navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack navigationItem.leftItemsSupplementBackButton = true navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)


let button: UIButton = UIButton (type: UIButtonType.Custom) button.setImage(UIImage(named: "imageName"), forState: UIControlState.Normal) button.addTarget(self, action: "backButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) button.frame = CGRectMake(0, 0, 30, 30) let barButton = UIBarButtonItem(customView: button) self.navigationItem.leftBarButtonItem = barButton func backButtonPressed(btn : UIButton) { // Your code }