2014-04-26 6 views
11

Ich habe eine UIViewController Unterklasse. Ich gebe dem View-Controller eine rightBarButtonItem in viewDidLoad wie folgt aus:Wenn UIBarButtonItem Titel zu ändern, der Übergang ruckelt/flackert

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Difficulty" 
     style:UIBarButtonItemStylePlain 
     target:nil 
     action:nil]; 

Wenn der Benutzer eine andere Taste in der Ansicht drückt der Titel/Text des UIBarButtonItem wird wie folgt geändert:

self.navigationItem.rightBarButtonItem.title = @"Mellansvår"; 

Es funktioniert gut, aber wenn der Titel geändert wird, sieht es nicht sehr gut aus. Der Text springt ein bisschen herum.

Ich habe UILabel Text zur Laufzeit vor dir geändert, und wenn ich ihren Text zu ändern ist wie folgt aussieht nicht, aber ich weiß nicht, wie ein UILabel zum navigationItem hinzuzufügen. Ich kann es in Interface Builder nicht tun, da die Navigationsleiste von einem UINavigationController stammt.

Gibt es eine Möglichkeit, den Titel reibungsloser zu ändern?

Antwort

3

Statt wieder den Titel zu setzen, können Sie die Taste erneut mit dem Titel gesetzt und dann animieren:

(void)setRightBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated 
1

Eine andere Lösung, den Titel zu ändern, ohne Animationen wäre.

[UIView performWithoutAnimation:^{ 
    self.navigationItem.rightBarButtonItem.title = @"Mellansvår"; 
}]; 
0

Sie die Animation ganz überspringen, wenn Sie den UIBarButtonItem Titel ändern, während es in die navigationItem, wie diese nicht angebracht ist: vollständig

UIBarButtonItem *tempItem = self.navigationItem.rightBarButtonItem; 
self.navigationItem.rightBarButtonItem = nil; 
tempItem.title = @"Mellansvår"; 
self.navigationItem.rightBarButtonItem = tempItem; 

Die Animation wird verschwinden, aber die visuelle Effekt sieht viel besser aus IMHO.