ios - Cómo configurar el texto del botón de retroceso en Swift
objective-c (21)
¿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 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
}
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)
El texto del botón de retroceso se toma del título del elemento de navegación del controlador de vista principal. Entonces, lo que establezca en el título del elemento de navegación del controlador de vista anterior, se mostrará en el texto del botón de retroceso del controlador de vista actual. Simplemente puede poner "" como título del elemento de navegación en el método viewWillAppear del controlador de vista principal.
self.navigationItem.title = ""
Otra forma es poner
self.navigationController?.navigationBar.topItem?.title = ""
en el método actual viewWillAppear del controlador de vista. Este causará algún otro problema si la pila de navegación está demasiado anidada.
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)
.
Esto debería funcionar:
override func viewDidLoad() {
super.viewDidLoad()
var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
self.navigationItem.backBarButtonItem = button
}
func goBack()
{
self.navigationController?.popViewControllerAnimated(true)
}
Aunque no se recomienda ya que esto realmente reemplaza el botón BackButton y también elimina la flecha hacia atrás y el gesto de deslizar.
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.
Si está utilizando el archivo xib para el controlador de vista, haga esto en su clase de controlador de vista.
class AboutUsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
edgesForExtendedLayout = []
setUpNavBar()
}
func setUpNavBar(){
//For title in navigation bar
self.navigationController?.view.backgroundColor = UIColor.white
self.navigationController?.view.tintColor = UIColor.orange
self.navigationItem.title = "About Us"
//For back button in navigation bar
let backButton = UIBarButtonItem()
backButton.title = "Back"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
}
El resultado será:
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 : configure el botón Atrás antes de presionar cualquier controlador de vista
// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()
// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)
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"
Swift 4.2
Si desea cambiar el texto del elemento del botón de retroceso de la barra de navegación,
viewDidLoad
en
viewDidLoad
del controlador ANTES del que muestra el botón de retroceso, NO en el controlador de vista donde está visible el botón de retroceso.
let backButton = UIBarButtonItem()
backButton.title = "New Back Button Text"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
Si desea cambiar el texto del título de la barra de navegación actual, use el código a continuación (tenga en cuenta que este se convierte en el texto posterior predeterminado para la vista SIGUIENTE introducida en el controlador de navegación, pero el código anterior puede anular este texto posterior predeterminado)
self.title = "Navigation Bar 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"
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.navigationItem.title = "Notes"
let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))
self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}
func goToNoteEditorViewController(){
// action what you want
}
¡¡Espero eso ayude!! #swift 3