2014-04-26 6 views
11

Mam podklasę UIViewController. Daję widoku kontrolera do rightBarButtonItem w viewDidLoad tak:Podczas zmiany nazwy UIBarButtonItem przejście jest gwałtowne/migocze

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

Gdy użytkownik naciśnie inny przycisk w widoku, tytuł/tekst UIBarButtonItem zmienia się tak:

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

Działa dobrze, ale kiedy tytuł się zmienia, nie wygląda zbyt dobrze. Tekst przeskakuje trochę.

Zmieniłem UILabel tekst w czasie wykonywania przed i kiedy zmienić ich tekst jest nie wyglądać tak, ale nie wiem jak dodać UILabel do navigationItem. Nie mogę tego zrobić w Konstruktorze interfejsów, ponieważ pasek nawigacyjny pochodzi z UINavigationController.

Czy istnieje sposób na płynniejszą zmianę tytułu?

Odpowiedz

3

Zamiast ponownie ustawiając tytuł, można ponownie ustawić przycisk z tytułem i następnie animować go:

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

Innym rozwiązaniem byłoby zmienić tytuł bez animacji.

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

Można pominąć animację całkowicie, jeśli zmienić tytuł UIBarButtonItem gdy jest nie dołączone do navigationItem, tak:

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

animacja zniknie całkowicie, ale wizualne efekt wygląda o wiele lepiej IMHO.