隐藏后的UIButton标题= NO

时间:2014-03-06 11:51:06

标签: ios objective-c uibutton

我有一个我在Storyboard中构建的UIButton。它的标题是“Hallo”(在Attributes Inspector中输入) 它通过Outlet连接。 在viewDidLoad中,我执行了以下操作:

self.myButton.hidden = YES;

在另一种方法中,我想更改标题并使按钮可见:

[self.myButton setTitle:@"Test" forState:UIControlStateNormal];
self.myButton.hidden = NO;

现在奇怪的是: 几毫秒我看到旧标题“Hallo”,然后它变为“Test”。 怎么会这样?如果我首先看到它然后更改文本,我就能理解这种行为。

6 个答案:

答案 0 :(得分:1)

检查标题是否突出显示按钮状态

[self.myButton setTitle:@"Test" forState:UIControlStateNormal];
[self.myButton setTitle:@"Test" forState:UIControlStateHighlighted];
self.myButton.hidden = NO;

答案 1 :(得分:1)

我在uitableview单元上放置的按钮也有同样的问题。以下代码为我工作。它为按钮的所有状态设置标题。

[self.myButton setTitle:@"Test" forState:forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected];
self.myButton.hidden = NO;

答案 2 :(得分:0)

我认为在触摸此按钮期间会调用第二部分。解决方案:

[self.myButton setTitle:@"Test" forState:UIControlStateNormal];
[self.myButton setTitle:@"Test" forState:UIControlStateSelected];
self.myButton.hidden = NO;

答案 3 :(得分:0)

我遇到了同样的问题。我可以绕过它的唯一方法是将标签更改为空字符串并禁用按钮而不是隐藏按钮:

self.myButton.setTitle(@"", UIControlState.Normal);
self.myButton.enabled = NO;

然后再次设置按钮文字并将其启用到您再次显示的位置:

self.myButton.setTitle(@"Test", UIControlState.Normal);
self.myButton.enabled = YES; 

答案 4 :(得分:0)

这与How to prevent UIButton from flashing when updating the title有关。当按钮标题更改时,文本更改似乎是动态的。在隐藏按钮的同时更改标题时,该动画可能仍在进行中,或者动画会延迟到显示按钮为止。

因此,如果要在隐藏按钮时设置按钮的标题然后立即显示,则应将两个动作包装在传递给UIView.performWithoutAnimation的块中,并在该块中调用layoutIfNeeded

UIView.performWithoutAnimation {
    self.button.setTitle("New Title", for: .normal)
    self.button.isHidden = false
    self.button.layoutIfNeeded()
}

答案 5 :(得分:-2)

请在viewWillAppear委托方法中执行所有这些操作。