Quiero ser capaz de establecer la fuente de mis aplicaciones de la barra de navegación botón de atrás sin hacer nada demasiado loco y sin perder ninguna de las otras características de diseño de la marca (es decir, quiero seguir la flecha).

Ahora puedo usar esto en viewDidAppear: para establecer la fuente de la normal botón de la barra de objetos.

for (NSObject *view in self.navigationController.navigationBar.subviews) {
    if ([view isKindOfClass:[UIButton class]]) {
        [((UIButton*)view).titleLabel setFont:[UIFont 
                                 fontWithName:@"Gill Sans" 
                                         size:14.0]];
    }
}

Sin embargo, esto no hace cambiar en el botón atrás, independientemente de que UIViewController este código se aplica a (raíz, corriente, etc.).

InformationsquelleAutor zachjs | 2013-05-14

7 Comentarios

  1. 114

    Para cambiar la apariencia del texto en todos los UIBarButtonItems que aparecen en todos los UINavigationBars, haga lo siguiente en application:didFinishLaunchingWithOptions:

    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:
        @{UITextAttributeTextColor:[UIColor blackColor],
         UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
         UITextAttributeTextShadowColor:[UIColor whiteColor],
         UITextAttributeFont:[UIFont boldSystemFontOfSize:12.0]
        }
         forState:UIControlStateNormal];

    ACTUALIZACIÓN: iOS7 versión

    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowOffset = CGSizeMake(0.0, 1.0);
    shadow.shadowColor = [UIColor whiteColor];
    
    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
     setTitleTextAttributes:
     @{NSForegroundColorAttributeName:[UIColor blackColor],
       NSShadowAttributeName:shadow,
       NSFontAttributeName:[UIFont boldSystemFontOfSize:12.0]
       }
     forState:UIControlStateNormal];

    Swift:

    NOTA: esto cambia TODAS las instancias de UIBarButtonItem, no sólo los contenidos dentro de un UINavigationBar

    UIBarButtonItem.appearance()
                   .setTitleTextAttributes([NSFontAttributeName : ExamplesDefaults.fontWithSize(22)], 
                                           forState: UIControlState.Normal)

    Swift3:

    UIBarButtonItem.appearance()
         .setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FontName-Regular", size: 14.0)!], 
                                 for: .normal) 
    • Esta es sin duda una manera más sencilla de hacerlo y se aplica a todas las futuras botón de la barra de elementos, no sólo en el botón atrás.
    • Funciona bien. Nota UITextAttributeTextColor, etc. en desuso en iOS 7.
    • Gracias!. Su Trabajo para mí.
    • ¿Qué acerca de iOS 11 ?
    • El proceso de pago: stackoverflow.com/a/28347428/469614
  2. 6

    Para cualquier persona que no tiene este trabajo, aquí está cómo lo hice, incluyendo apareció de vuelta a la Raíz ViewController en IOS7:

    UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:self action:@selector(popToRoot:)];
    backBtn.title = @"Back";
    [backBtn setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                     [UIFont fontWithName:@"Chalkduster" size:15], NSFontAttributeName,
                                     [UIColor yellowColor], NSForegroundColorAttributeName,
                                     nil]
                           forState:UIControlStateNormal];
    
    self.navigationItem.leftBarButtonItem=backBtn;

    popToRoot ViewController:

    - (IBAction)popToRoot:(UIBarButtonItem*)sender {
    [self.navigationController popToRootViewControllerAnimated:YES];
    }

    Tal vez alguien puede tener el uso de este.

    • No trabajo con configuraciones regionales y desecha el preconfigurados accesibilidad consejos necesarios para conseguir una aplicación en el IAS. Usted siempre debe usar el sistema de botones a menos que quieras hacer un montón de trabajo extra.
  3. 2

    En Swift3:

    let font = UIFont(name: "Verdana", size: 10.0)
    
    //Back button
    UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font!], for: UIControlState.normal)  
    
    //Title in the navigation item
    let fontAttributes = [NSFontAttributeName: font]
    self.navigationController?.navigationBar.titleTextAttributes = fontAttributes

    Nota: usted sólo tiene que hacer esto una vez para la Navegación controlador.

  4. 2

    Swift 3.0+

    AppDelegate.swift

    UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "myFont", size: 17.0)!], for: .normal)
  5. 1

    El uso de este lugar en el AppDelegate o donde la NavigationController se inicializa, el método disponible en iOS 5 y superior

    UIBarButtonItem *backbutton =  [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:nil action:nil];  
    [backbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor blackColor],UITextAttributeTextColor,[UIFont fontWithName:TEXTFONT size:16.0f],UITextAttributeFont,
                                                       nil] forState:UIControlStateNormal]; 
    • Esta no es realmente una respuesta completa desde el boton atrás configurado no se utiliza.
    • la pregunta dijo para cambiar la fuente no cómo utilizar el botón. si quieres saber cómo utilizar que usted debe hacer.
  6. 0

    Si usted está utilizando el nuevo UISplitViewControllerDelegate para dividir vistas en iOS 8, los métodos anteriores no funcionan debido a que el nuevo displayModeButtonItem funciona un poco diferente.

    Que usted necesita para establecer la fuente al crear el displayModeButtonItem. Suponiendo que usted está siguiendo a Apple plantillas esta es, probablemente, en prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender donde se iba a hacer algo como esto:

    //From Apple's Template:
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
    [controller setDetailItem:object];
    controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
    controller.navigationItem.leftItemsSupplementBackButton = YES;
    //New Line to set the font:
    [controller.navigationItem.leftBarButtonItem setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];
    • En realidad, después de más pruebas, no creo que esto funciona. Si alguien tiene una idea de cómo cambiar la fuente en el displayModeButtonItem hágamelo saber.

Dejar respuesta

Please enter your comment!
Please enter your name here