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




swift swift2 (14)

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.


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)

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 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)
}

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 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)

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 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 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
}




xcode7