【问题标题】:UIToolbar items disappear - Weird bug in ios6UIToolbar 项目消失 - ios6 中的奇怪错误
【发布时间】:2013-01-09 01:16:57
【问题描述】:

这是当前设置。

我有带有 5 个按钮的 navigationController 工具栏,点击它们会隐藏工具栏 2 秒钟,然后再次显示工具栏(第 5 个按钮除外 - 它会显示一个带有按钮(操作和取消)的操作表)。

在点击 1-4 按钮时,我执行 self.navigationController.toolbarHidden = YES; 并在 2 秒 后设置 self.navigationController.toolbarHidden = NO;,这会带回工具栏,一切都很好。

点击第 5 个按钮时,会弹出操作表。

  1. 如果我点击取消操作表 => 操作表已关闭 => 工具栏很好。
  2. 如果我点击 ACTION 按钮,我会执行 self.navigationController.toolbarHidden = YES; 并在 2 秒后... self.navigationController.toolbarHidden = NO; 但现在......工具栏按钮不见了。

进一步调查...

我可以看到工具栏按钮的 alpha 值设置为 0。

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

谁能告诉我这个的根本原因?

【问题讨论】:

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


    【解决方案1】:

    您是否尝试将工具栏项数组设置为零?我遇到了同样的问题,结果证明在设置工具栏的项目时进行检查似乎有效:

    if ([self.navigationController.toolbar.items count] > 0) {
       [self.navigationController.toolbar setItems:nil];
    }
    
    [self.navigationController.toolbar setItems:toolbarItems]; //toolbarItems is your array of UIBarButtonItems.
    

    【讨论】:

    • 设置断点时是否会进入 if 语句?这个问题要了我的命,这对我有用...
    • 是的,它确实进入了 IF 语句。我认为以这种方式解决它是不对的。工具栏不需要再设置一次。设置一次就足够了。
    • 你搞清楚了吗?
    • 我找不到问题的原因。
    【解决方案2】:

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

    这解决了toolbarItems消失的问题。

    但工具栏项消失并设置 alpha=0 的原因对我来说仍然是个谜。如果有人找到原因,请告诉我:)

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,并在其中一个示例中重现了它。在 loadView / viewDidLoad 中手动设置工具栏项,然后调用 ActionSheet 时,这似乎是 iOS6 中的一个错误。

      下面的代码是一种解决方法-

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

      【讨论】:

      • 我的解决方法是在操作表启动时隐藏工具栏,并在操作表后将其显示回来。
      【解决方案4】:

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

      例子:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-16
          • 1970-01-01
          • 1970-01-01
          • 2017-07-07
          • 2010-12-07
          • 1970-01-01
          相关资源
          最近更新 更多