NavigationController UIToolbar 更改项

Posted

技术标签:

【中文标题】NavigationController UIToolbar 更改项【英文标题】:NavigationController UIToolbar Change Items 【发布时间】:2011-11-02 20:54:42 【问题描述】:

我想通过隐藏工具栏、更改项目(按钮、固定空间等)并再次显示来更改我的 UIToolbar 中的项目。

我目前在我的UIToolbar 上有一个按钮,按下该按钮时,通过调用[[self navigationController]setToolbarHidden:YES animated:YES]; 隐藏工具栏。

如何设置这些项目?是否可以使用界面生成器或者我需要硬编码它们?

【问题讨论】:

由于显而易见的原因,无法使用 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 属性中。如果您需要进一步的帮助或任何解释,请告诉我。

【讨论】:

如何将新工具栏显示在视图中?【参考方案2】:

您可以通过这种方式为工具栏设置新项目:

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

它还会为更改设置动画,因此您可能不需要再次隐藏和显示它,这通常不是一个好的 UI 做法。

【讨论】:

我使用这种方法,我可以删除工具栏项,但无法读取它们。为什么会这样?【参考方案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;
    ];
];

【讨论】:

以上是关于NavigationController UIToolbar 更改项的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 比 NavigationController 大

navigationController显示隐藏问题

navigationController:willShowViewController: 用于 ModalViewController?

以编程方式删除 NavigationController

navigationController.navigationItem 与 navigationItem

使用 NavigationController 将视图添加到 TableViewController