theme plantillas plantilla para elegantthemes divi ios swift cocoa-touch uinavigationcontroller uinavigationbar

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 .
- REFERENCIA -

Apple Docs en el protocolo de appearance .