UIToolbar项目消失 - ios6中的奇怪错误

时间:2013-01-09 01:16:57

标签: iphone objective-c ios cocoa-touch ios6

这是当前的设置。

我有3-5个按钮的navigationController工具栏,点击它们会隐藏工具栏2秒钟,然后再次显示工具栏(第5个按钮除外 - 它会显示带按钮的动作表(ACTION& CANCEL))。

在点击1-4按钮时,我执行了self.navigationController.toolbarHidden = YES;,在完成 2秒后,我设置了self.navigationController.toolbarHidden = NO;,这将带回工具栏,一切都是精细。

点击第5个按钮,显示操作表。

  1. 如果我点击CANCEL actionsheet => actionSheet dismissed =>工具栏很好。
  2. 如果点击“操作”按钮,我会执行self.navigationController.toolbarHidden = YES;并在2秒后... self.navigationController.toolbarHidden = NO; 但现在......工具栏按钮是GONE。
  3. 进一步调查......

    我可以看到toolbarButtons似乎将 alpha 值设置为0.

    我不知道为什么工具表操作后工具栏项的alpha设置为value = 0。

    有谁可以告诉我这个的根本原因?

5 个答案:

答案 0 :(得分:3)

您是否尝试将工具栏项数组设置为nil?我遇到了同样的问题,结果发现在设置工具栏的项目时检查一下似乎有效:

if ([self.navigationController.toolbar.items count] > 0) {
   [self.navigationController.toolbar setItems:nil];
}

[self.navigationController.toolbar setItems:toolbarItems]; //toolbarItems is your array of UIBarButtonItems.

答案 1 :(得分:1)

我设法以不同的方式解决问题。当操作表出现时我隐藏了工具栏,在buttonAction()之后,我基本上再次显示工具栏。

这解决了toolbarItems消失的问题。

但是为什么too​​lbarItems消失并设置alpha = 0的原因对我来说仍然是一个谜。如果有人发现原因,请告诉我:)。

答案 2 :(得分:0)

我有同样的问题,并在其中一个样本中复制。在loadView / viewDidLoad中手动设置工具栏项,然后调用ActionSheet时,它似乎是iOS6中的一个错误。

以下代码是一种解决方法 -

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSArray* items = self.toolbarItems;
    [self setToolbarItems:nil];
    [self setToolbarItems:items animated:NO];
}

答案 3 :(得分:0)

我通过将动作代码移动到单独的方法然后通过发送消息performSelector:withObject:afterDelay:以0.25f秒延迟来调用它来解决它

示例:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0) {
        [self performSelector:@selector(logout) withObject:nil afterDelay:0.25f];
    }
}

答案 4 :(得分:0)

我不知道是不是这样,我发现消失的物品实际上在工具栏中,但放在视图的底部。在某些情况下重置它们可能会导致自动布局问题。

我通过在viewcontroller的视图(而不是navigationControllers')上调用setNeedLayout方法来修复它。

self.toolbarItems = toolButtons;
[self.view setNeedsLayout];