2013-05-14 6 views
43

Ich möchte in der Lage sein, die Schriftart meiner Apps Navigationsleiste zurück Button ohne etwas zu verrückt und ohne zu verlieren andere Design-Eigenschaften der Taste (dh ich möchte den Pfeil behalten) .Ändern Sie die Schriftart der Zurück Navigationsleiste Taste

Im Moment benutze ich diese in , um die Schriftart der normalen bar-Taste Elemente festzulegen.

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

Jedoch macht dies keine Änderung auf den Knopf zurück, unabhängig davon, welche UIViewController dieser Code angewendet wird (root, Strom, usw.).

+0

Individuelle Stilisierung UIBarButton Artikel: http://stackoverflow.com/a/28347428/469614 – Vexy

Antwort

108

Um das Erscheinungsbild des Textes in allen in allen UINavigationBars erscheinen UIBarButtonItems zu ändern, gehen Sie wie folgt in 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]; 

UPDATE: iOS7 Version

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:

Hinweis: Dies ändert alle Instanzen UIBarButtonItem, nicht nur die in einem UINavigationBar enthalten

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

swift3. UIBarButtonItem.appearance() setTitleTextAttributes ([NSFontAttributeName: UIFont (Name : "FontName-Regular", Größe: 14.0)!], Für: .normal)

+1

Dies ist definitiv eine einfachere Art, es zu tun, und es gilt für alle zukünftigen Bar-Taste Elemente, nicht nur die Zurück-Taste. – zachjs

+1

Funktioniert gut. Hinweis UITextAttributeTextColor usw. in iOS 7 veraltet. – LordParsley

+0

Vielen Dank !. Es funktioniert für mich. – Raja

1

verwenden stattdessen in Ihrem AppDelegate oder wo die Navigation initialisiert wird, Verfahren in iOS 5 und höher

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]; 
+1

Dies ist nicht wirklich eine komplette Antwort, da das BackButton konfiguriert nicht verwendet wird. –

+0

@MikePollard die Frage sagte, um die Schriftart nicht zu ändern, wie man den Knopf benutzt. Wenn Sie wissen wollen, wie man es benutzt, sollten Sie fragen. –

6

Für alle, die das noch nicht richtig gemacht haben, hier ist, wie ich es gemacht habe, einschließlich der Rückkehr zum Root ViewController in 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]; 
} 

Vielleicht Verwendung dieser jemand kann.

+0

Funktioniert nicht mit Gebietsschemata und verwirft die vorkonfigurierten Zugänglichkeitshinweise, die zum Abrufen einer App in IAS erforderlich sind. Sie sollten immer die vom System bereitgestellten Tasten verwenden, es sei denn, Sie möchten viel zusätzliche Arbeit verrichten. – Barry

0

Wenn Sie die neue UISplitViewControllerDelegate für geteilte Ansichten in iOS 8 verwenden, werden die oben genannten Methoden nicht funktionieren, weil die neue displayModeButtonItem ein bisschen anders funktioniert.

Sie müssen die Schriftart festlegen, wenn Sie die displayModeButtonItem erstellen.Angenommen, Sie sind folgende Apple-Vorlagen ist dies wahrscheinlich in prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender, wo man so etwas tun würde:

// 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]; 
+0

Eigentlich nach mehr Tests glaube ich nicht, dass das funktioniert. Wenn jemand eine Idee hat, wie man die Schriftart auf dem 'displayModeButtonItem' ändert, lass es mich wissen. – Nick

2

In 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 

Hinweis: Sie müssen dies nur einmal für den Navigationscontroller tun.

1

Swift 3.0+

AppDelegate.swift

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