Элементы изменения панели инструментов NavigationController

#iphone #objective-c #xcode #uinavigationcontroller #uitoolbar

#iPhone #objective-c #xcode #uinavigationcontroller #uitoolbar

Вопрос:

Я хочу изменить элементы в моем UIToolbar , скрыв панель инструментов, изменив элементы (кнопка, фиксированный пробел и т. Д.) И открыв его снова.

В настоящее время у меня есть кнопка UIToolbar , которая при нажатии скрывает панель инструментов при вызове [[self navigationController]setToolbarHidden:YES animated:YES]; .

Как я могу установить эти элементы? Возможно ли это с помощью interface builder или мне нужно их жестко закодировать?

Комментарии:

1. Невозможно использовать IB по очевидным причинам. Вам нужно будет добавить объекты в UIToolbar, установить для них значение null (при их скрытии) и переназначить их обратно в UIToolbar, когда вы захотите показать его снова.

Ответ №1:

Это нестандартное поведение, но оно должно быть выполнимым. Вместо удаления и добавления новых кнопок на существующую панель инструментов можно создать другую панель инструментов, которая вместо этого исчезает. Это упростило бы кодирование / отладку. В общем, для этого просто требуется меньше «беспорядка».

Для достижения желаемого поведения вы могли бы сделать что-то вроде:

 float animationDuration = .25;

[UIView animateWithDuration:animationDuration animations:*{
    // Remove the old toolbar.
    self.oldToolbar.alpha = 0;

    // Fade the new toolbar in.
    self.newToolbar.alpha = 1;
}];
  

В этом примере предполагается, что вы уже загрузили другую панель инструментов в newToolbar свойство. Дайте мне знать, если вам нужна дополнительная помощь или какие-либо объяснения.

Комментарии:

1. Как мне отобразить новую панель инструментов?

Ответ №2:

Вы можете установить новые элементы для панели инструментов таким образом:

 [toolbar setItems:<new_items_array> animated:YES];
  

Он также анимирует изменение, поэтому вам может не понадобиться скрывать и показывать его снова, что в целом не является хорошей практикой пользовательского интерфейса.

Комментарии:

1. Я использую этот метод, и я могу удалять элементы панели инструментов, но не могу их перечитывать. Почему это так?

Ответ №3:

Немного странный… это немного сложно, но должно быть в порядке:

 [UIView animateWithDuration:0.5f animations:^{
    // Remove the old toolbar.
    self.oldToolbar.alpha = 0;

} completion:^(BOOL finished) {
    //add code to change toolbar.
    [UIView animateWithDuration:0.5f animations:^{
        // Fade the new toolbar in.
        self.newToolbar.alpha = 1;
    }];
}];