【发布时间】: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