ios - Cómo configurar el texto del botón de retroceso en Swift




objective-c (14)

El botón Atrás pertenece al controlador de vista anterior , no el que se presenta actualmente en la pantalla.
Para modificar el botón de retroceso, debe actualizarlo antes de presionar, en el controlador de vista que inició el seguimiento:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

Swift 3:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Back"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

¿Cómo se elimina el texto del botón de retroceso?

current back button: <Back
desired back button: <AnythingElse

Ninguno de estos ha funcionado:

self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title

El botón Atrás pertenece al controlador de vista anterior, no el que se presenta actualmente en la pantalla. Para modificar el botón Atrás, debe actualizarlo antes de presionar, agregue viewdidload:

Swift 4:

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

En el método viewDidLoad del controlador de presentación, agregue:

// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

Establezca self.title = "" antes de self.navigationController?.pushViewController(vc, animated: true) .


No sé dónde usó los métodos que puso en su pregunta, pero podría obtener el resultado deseado si lo uso, en mi clase ViewController (en la que quiero cambiar el botón Atrás), en la función viewDidLoad() , el línea siguiente:

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

El resultado será:

antes de

Después


Prueba esto ... funcionará ...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.title = ""
}

El código anterior ocultará el texto y mostrará solo la flecha hacia atrás en la barra de navegación.


Puede poner esta línea de código 3 en su override func viewDidLoad() {} .

let backButton = UIBarButtonItem()

backButton.title = "name"

self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

Si está presionando un controlador de vista desde la página del controlador de vista de página, no puede actualizar el título del botón de retroceso del controlador de navegación. Para resolver esto, cree un delegado nuevamente en su controlador de vista principal (también puede atravesar la jerarquía del controlador de vista hasta el padre).

Además, los botones Atrás tienen un límite de caracteres. Si excede ese límite de caracteres, el sistema pasará por defecto a "Atrás". No se truncará por ti. Por ejemplo:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.

Simplemente puede modificar el elemento de navegación en el guión gráfico

En el botón Atrás, agregue un espacio y presione Entrar.

Nota: Haga esto en el VC anterior.


aunque estas respuestas solucionan el problema, pero esto podría ser útil

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

Swift 4

En mi caso, la solución fue borrar el elemento de navegación del Master View Controller antes de pasar al Child View Controller. Y configúrelo nuevamente si se muestra nuevamente

MasterController

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

Y así es como presiono un UIViewController y borro el elemento del botón de la barra posterior en el controlador secundario:

MasterController

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)

Swift 4

Si bien el dicho anterior para prepararse para la segue es correcto y es cierto, el botón Atrás pertenece al VC anterior, solo agrega un montón de código innecesario.

Lo mejor que puede hacer es establecer el título del VC actual en viewDidLoad y automáticamente establecerá el título del botón Atrás correctamente en el próximo VC. Esta línea me funcionó

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

para Swift 4.2

let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem

rápido 4

solo hay una forma de cambiar el texto en backButton mediante programación desde viewController actual:

navigationController?.navigationBar.items![0].title = "some new text"




swift