【问题标题】:Changing title of UIButton on Nav Bar, wrong title appears for a split second iOS在导航栏上更改 UIButton 的标题,一瞬间出现错误的标题 iOS
【发布时间】:2015-06-09 14:24:57
【问题描述】:

在注册期间,我的 iOS 应用程序中有一个视图控制器,用户可以选择跳过。但是,如果他们开始该步骤,他们要么必须完成它,要么点击撤消,这样部分信息就不会被保存。为了确保这一点,我隐藏了转到下一个屏幕的导航栏按钮。起初,我有文字说“跳过”,然后当你开始输入信息时,它就会消失,一旦你输入了足够的信息,标题应该变成“NEXT”。它也可以向后工作。你可以输入足够的信息让“NEXT”出现,然后点击撤消,按钮消失,继续点击撤消,按钮应该再次显示“跳过”。

问题在于,当按钮重新出现时,它仍然具有旧标题,然后再更改为新标题。所以它会说“SKIP”,用户开始输入信息,它消失了,用户输入了所有信息,它重新出现,说“SKIP”片刻,然后变成“NEXT”。

这是在信息更新时调用的函数,检查按钮应显示的内容:

-(void)checkValid
{
    if( /*starting condition*/ )
    {
        [_nextButton setTitle:@"SKIP" forState:UIControlStateNormal];
        [_nextButton setTitle:@"SKIP" forState:UIControlStateDisabled];
        [_nextButton setTitle:@"SKIP" forState:UIControlStateSelected];
        [_nextButton setTitle:@"SKIP" forState:UIControlStateHighlighted];
        [_nextBarButtonItem setEnabled:YES];
        [_nextButton setHidden:NO];
    }
    else if( /* complete condition */ )
    {
        [_nextButton setTitle:@"NEXT" forState:UIControlStateNormal];
        [_nextButton setTitle:@"NEXT" forState:UIControlStateDisabled];
        [_nextButton setTitle:@"NEXT" forState:UIControlStateSelected];
        [_nextButton setTitle:@"NEXT" forState:UIControlStateHighlighted];
        [_nextBarButtonItem setEnabled:YES];
        [_nextButton setHidden:NO];
    }
    else /* in between condition */
    {
        [_nextButton setHidden:YES];
        [_nextBarButtonItem setEnabled:NO];
    }
}

_nextButton 是我拖到 IB 导航栏上的自定义 UIButton。 _nextBarButtonItem 是 UIButton 在视图层次结构中出现的 UIBarButtonItem。我最初只是设置了 UIControlStateNormal 的标题,但我想也许当按钮出现时它处于不同的状态,所以我尝试添加每个状态...

有什么想法可能会出错吗?我不会在其他可能有冲突的地方更改标题。

感谢任何提示。

edit - 我已经尝试更改它,以便只更改 _nextButton 的隐藏属性,因此 _nextBarButtonItem 的启用属性始终处于打开状态。这允许相同的功能(因为 _nextButton 是隐藏的,所以您不能按下它),但它仍然只显示不正确的文本一瞬间。代码与我之前发布的完全相同,只是所有 [_nextBarButtonItem setHidden:] 调用都被注释掉了。

【问题讨论】:

  • 你在哪里称这个checkValid方法?我怀疑您是在某个动画结束时调用它,但需要在该动画开始时更新
  • 顺便说一句,只为UIControlStateNormal 设置标题就足够了。如果你想要一个不同的标题,你只需要为其他州设置它,这似乎不是这里的情况。
  • @ThomasMüller 这就是我对 UIControlStateNormal 的看法,但是当它不起作用时,我覆盖了我的基础哈哈。在将一个点添加到坐标列表后,我调用 checkValid。我正在向地图添加形状,因此您只有 1 或 2 个坐标,您的形状无效。没有动画,除非引擎盖下的某些东西被添加为动画,但即使那样,它也不应该影响检查列表上的计数,我只在添加坐标后检查一次,所以没有因为那个按钮会出现,检查会再次被调用,并且标题会改变。

标签: ios objective-c uibutton uibarbuttonitem


【解决方案1】:

好的,在我们尝试任何过于激烈的事情之前,这里有一些非编码解决方案(我相信您已经尝试过这些,但再尝试其中一个永远不会太晚。:D)

  • 尝试使用“Product”>“Clean”“清理”您的缓存/目标。
  • 您是在 sim 上还是在有形的 iOS 设备上进行测试?如果您在模拟器上,请运行项目,选择“iOS 模拟器”(从屏幕顶部)>“重置内容和设置”。
  • 如果这些不起作用,您可以将项目放在 GitHub 上,我会下载/查看它。你永远不知道,可能是那些奇怪的 Xcode 怪癖之一! ;)

对不起,基本解决方案。就我个人而言,没有手头的实际文件很难解决问题。对不起!

【讨论】:

  • 我已经清理了多次,并在 4、4s、5、5s、6 和 6+ 上运行了该应用程序。它发生在所有设备上,当我在应该更改按钮的功能之间来回切换时会发生这种情况。我确保在取消设置隐藏之前更改标题,所以我不确定它是什么。我们将其归结为一个我们不太担心的小错误。我很感激能提供这个项目,但它是一个私人项目,所以我不能发送 GitHub。对不起!
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2016-01-04
相关资源
最近更新 更多