ios - plantillas - elegantthemes wordpress
¿Cómo puedo cambiar la fuente del botón Atrás para mi barra de navegación? (5)
¿Cómo puedo cambiar la fuente del botón Atrás de mi barra de navegación?
El botón de retroceso es "atrás" o el título del controlador de vista anterior.
Pensé que este viewDidLoad
funcionaría:
navigationController?.navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FONTNAME", size: 20)!], forState: UIControlState.Normal)
pero el leftBarButton?
devoluciones opcionales nil
.
Acabo de probar su código y parece que la razón por la que la línea devuelve nil
es en realidad porque el name: "FONTNAME"
devuelve nil. Por lo tanto, si establece ese atributo de name
en un nombre de fuente válido, el código debería ejecutarse sin un error, incluso si navigationController?.navigationItem.leftBarButtonItem
está explícitamente establecido en nil.
Pero independientemente, también como he visto a través de las pruebas, esta línea no te dará el resultado que aparentemente deseas. El UINavigationController
navigationController
principal no debería estar allí ya que accede a su UINavigationController
y no a la vista actual. Simplemente use la UIViewController
del UIViewController
navigationItem
propio de leftBarButtonItem
para acceder directamente a su leftBarButtonItem
, por ejemplo:
let backButton = UIBarButtonItem(title: "< Back", style: UIBarButtonItemStyle.Plain, target: self, action: "goBack")
navigationItem.leftBarButtonItem = backButton
navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Chalkduster", size: 20)!], forState: UIControlState.Normal)
Editar : A partir del comentario que publicó en esta respuesta, parece como si realmente no desea configurar leftBarButtonItem
pero backBarButtonItem
porque no desea implementar una acción personalizada más allá de volver al controlador de vista anterior.
Por lo tanto, en ese controlador de vista anterior (es decir, la vista antes de que desee mostrar su elemento de botón de retroceso personalizado), puede configurar su botón de retroceso personalizado sin una acción como esta:
let backButton = UIBarButtonItem(title: "< Back", style: UIBarButtonItemStyle.Plain, target: self, action: nil)
backButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Chalkduster", size: 20)!], forState: UIControlState.Normal)
navigationItem.backBarButtonItem = backButton
Cuando esté seguro de que ya ha configurado un UIBarButtonItem
, puede hacer lo siguiente:
self.navigationItem.leftBarButtonItem!.title = "myTitle"
Para cambiar, por ejemplo, el color, puede hacer lo siguiente:
self.navigationItem.leftBarButtonItem!.tintColor = UIColor.redColor()
Cuando no lo ha establecido en su guión gráfico, puede hacer:
self.navigationItem.leftBarButtonItem = UIBarButtonItem()
Para cambiar la fuente, haga lo siguiente:
self.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FONTNAME", size: 20)!], forState: .Normal)
Tal vez debería mencionar que no debes usar el yo. navigationController
porque al configurar los botones de navigationController no se muestran en la pantalla, por lo que los botones que están en la pantalla y se han establecido en el guión gráfico deben ser self.navigationItem
...
SWIFT 3
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Open Sans", size: 15)!,NSForegroundColorAttributeName: UIColor.white]
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Open Sans", size: 15)!], for: UIControlState.normal)
Si desea aplicar este cambio a toda su aplicación, puede usar el siguiente código:
Swift 4
He agregado estas líneas a AppDelegate.swift
en la función de la application
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().titleTextAttributes = [
NSAttributedStringKey.font: UIFont(name: "IranSansMobile", size: 20)!
]
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "IranSansMobile", size: 15)!], for: UIControlState.normal)
return true
}
Swift 3
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().titleTextAttributes = [
NSFontAttributeName: UIFont(name: "IranSansMobile", size: 20)!
]
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "IranSansMobile", size: 15)!], for: UIControlState.normal)
return true
}
Si necesita cambiar el estilo de fuente completamente en su aplicación (también conocido como cada botón de navegación), el método preferido es usar el proxy UIBarButtonItem.appearance()
.
El fragmento de código de muestra se vería así:
SWIFT 3.0+
//make sure font name u use below *actually* exists in the system !
//if it doesn''t app will crash because we''re force unwrapping an optional (see below) !!!
let customFont = UIFont(name: "customFontName", size: 17.0)!
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], for: .normal)
Es aconsejable colocar este fragmento de código en algún lugar al comienzo de su archivo AppDelegate.swift
porque la estilización de fuentes tiene que suceder cada vez que se inicia la aplicación. Además, puede colocar este código en cualquier otro lugar (por ejemplo, la clase Presenter
) donde realiza la personalización y la personalización de su interfaz de usuario. Tan pronto como se ejecute este código, todos sus BarButtons se personalizarán a partir de entonces.
PERO para permanecer realmente 🤓 🤓, primero deberías desenvolver tu fuente y, eventualmente, recurrir a la fuente del sistema si no se encuentra:
var textAttributes: [String:Any]
//custom font setup
let fontColor = UIColor.purple
let barItemCustomFont = UIFont(name: "👑", size: 14) //note we''re not forcing anything here
//can we use our custom font 🤔
if let customFont = barItemCustomFont {
//hooray we can use our font 💪
textAttributes = [NSForegroundColorAttributeName: fontColor, NSFontAttributeName: customFont]
} else {
//👎 not found -> omit setting font name and proceed with system font
textAttributes = [NSForegroundColorAttributeName: fontColor]
}
//finally
UIBarButtonItem.appearance().setTitleTextAttributes(textAttributes, for: .normal)
En un mundo real, normalmente se necesita personalizar el estilo de fuente UINavigationBar
y UIBarButton
(aparte de otros parámetros) para que sean consistentes visualmente. Aquí está la práctica función stylizeNavigationFontOfMyAmazingApp🎨
que puedes usar:
func stylizeNavigationFontOfMyAmazingApp🎨() {
//custom font
let customFont = UIFont(name: "someFancyFont", size: 16)! //note we''re force unwrapping here
//navigation bar coloring:
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor.blue
//unique text style
var fontAttributes: [String: Any]
fontAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: customFont]
//navigation bar & navigation buttons font style:
UINavigationBar.appearance().titleTextAttributes = fontAttributes
UIBarButtonItem.appearance().setTitleTextAttributes(fontAttributes, for: .normal)
}
Ventajas de usar el proxy de appearance()
- Dos fragmentos de código del liner para estilizar cada
UIBarButtonItem
en su aplicación / proyecto. - Puede mezclar los proponentes de
appearance()
de varias clases para obtener un estilo visual verdaderamente único - Si necesita más control de personalización, puede volver a personalizar cada botón (por ejemplo, colocando vistas personalizadas, botones, imágenes, etc.) en una instancia específica de
UIBarButtonItem
.
Apple Docs en el protocolo de appearance
.