Подтвердить что ты не робот

Как оживить изменение кнопки в UINavigationBar?

Я вызываю метод -(void)setEditing:(BOOL)editing animated:(BOOL)animated в своем коде для обмена двумя кнопками на RHS моей панели навигации.

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {  
  [super setEditing:editing animated:animated];  

  // Toggle ‘+’ and ‘Add To Order’ button.    

  if( editing ) {
    self.navigationItem.rightBarButtonItem = self.addItemButton;  
  }  
  else {           
    self.navigationItem.rightBarButtonItem = self.addToOrderButton;  
  } 
}

Где self.addItemButton и self.addToOrderButton - ivars, содержащие предопределенные UIBarButtonItems, установите в awakefromNib.

Кнопка в self.addToOrderButton значительно шире, чем та, что находится в self.addItemButton, поэтому Id, как и их, будет тонкой анимацией между двумя ширинами, когда запускается изменение состояния редактирования (путем нажатия стандартного editButtonItem на LHS навигации.

Если я окружаю весь if:else с помощью [UIView beginAnimations:nil context:NULL]; и [UIView commitAnimations];, смена кнопки делает анимированный, но с их позициями, летающими на место отдельно от верхнего левого угла, а не на месте и просто анимацией их ширины.

Как я одушевляю элементы панели навигации, чтобы каждый отдельный (кнопка RHS, заголовок) оживлял более подходящие, сдержанные способы?

4b9b3361

Ответ 1

self.navigationItem.rightBarButtonItem = self.addToOrderButton; 

Существуют специальные методы, которые можно использовать для анимации элементов правой и левой панели:

 [self.navigationItem setRightBarButtonItem: self.addToOrderButton animated:YES];

..., который будет анимировать его для вас. Если вам нужно все для анимации (включая название), вы также можете использовать метод setItems:animated: вашей панели навигации (передать его в массив элементов навигации, которые вы хотите отобразить)