是否有可能以编程方式更新UIButton标题/文本?

我有一个UIButton ,当按下时,会popup一个新的视图,用户可以更改一些设置。 当视图被解散时,我想更新UIButton的标题/文本以反映新的状态。 我打电话给:

 [myButton setTitle: @"myTitle" forState: UIControlStateNormal]; [myButton setTitle: @"myTitle" forState: UIControlStateApplication]; [myButton setTitle: @"myTitle" forState: UIControlStateHighlighted]; [myButton setTitle: @"myTitle" forState: UIControlStateReserved]; [myButton setTitle: @"myTitle" forState: UIControlStateSelected]; [myButton setTitle: @"myTitle" forState: UIControlStateDisabled]; 

但似乎从未如IB所规定的原始文本/标题改变。

你有在你的视图控制器类中指定为一个IBOutlet的button,并作为Interface Builder中的sockets正确连接(从新的引用出口拖动到文件的所有者,并select你的UIButton对象)? 这通常是我看到这些症状时的问题。


编辑:虽然这不是这种情况下,这样的事情也可以发生如果你设置一个归因的标题button,然后你试图改变标题,而不是归属的标题。

我解决了这个问题只是设置UIControlStateNormal的标题参数,它会自动在其他状态。 这个问题似乎是当你设置另一个UIControlState。

 [myButton setTitle: @"myTitle" forState: UIControlStateNormal]; 

我发现了另一个问题。 这可能是iOS 5中引入的一个错误,但是我想我会为遇到它的其他人指出这个错误。

如果您没有为XIB中的button设置任何默认文本,如果以编程方式设置,则不会出现任何文本。 如果您在XIB中设置文本,则随后以编程方式分配给button的任何文本将被截断为默认文本的大小。

最后,如果您使用button显示视图,然后调用另一个视图(如ActionSheet),然后closures它,则以编程方式分配给button的文本将被删除,并且button标题将返回到您设置的任何内容在XIB。

即使咖啡因昏迷的问题已经解决,我想提供另一个潜在的原因,标题不显示在UIButton上。

如果您使用UIButton设置图像

 - (void)setImage:(UIImage *)image forState:(UIControlState)state 

它可以涵盖标题。 我发现这很困难,想象一下你们最终会因为同样的原因阅读这个页面。

改用这个方法

 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 

对于button图像和标题不会受到影响。

我用在.xib中创build的编程创build的button和button来testing它

迅速:

  button.setTitle("Click", forState: .Normal) 

为迅速:

 button.setTitle("Swift", forState: UIControlState.Normal) 

原来的文件告诉你答案! 如果UIButton已经有了一个Attributed String来使用(看起来是使用Xcode接口生成器的默认值),那么UIButton会忽略标题的改变。

我使用了以下内容:

 [self.loginButton setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Error !!!" attributes:nil] forState:UIControlStateDisabled]; [self.loginButton setEnabled:NO]; 

还有一个可能的原因是:

如果你试图在(id)initWithNibName: ...方法中设置button的标题,那么你的button属性仍然是零。 它还没有被分配到UIButton。

你必须确保你在(void)viewWillLoad(void)viewWillAppear方法中设置你的button,但是你可能不想把它们设置为(void)viewDidAppear

有时会变得非常复杂。 简单的方法是“ 刷新 ”button视图!

 //Do stuff to your button here. For example: [mybutton setEnabled:YES]; //Refresh it to new state. [mybutton setNeedsDisplay]; 

我一直有这个问题,唯一的解决办法是添加一个图像和标签作为子视图到uibutton。 然后我发现主要的问题是我使用了一个标题为:Attributed的UIButton。 当我把它改为Plain时,只需设置titleLabel.text就行了!

@funroll是绝对正确的。 在这里你可以看到你需要什么确保函数只在主线程上运行 。 如果你不想处理线程,你可以这样做,例如:创buildNSUserDefaults和在ViewDidLoad中检查条件被按下的button在另一个视图或不在(在NSUserDefaults需要的信息中设置另一个视图),并根据条件设置所需的标题为你的UIButton,所以[yourButton setTitle:@“Title”forState:UIControlStateNormal];

迅速尝试这个

 button.setTitle("metin", forState: .Normal) 

确保你在主线程。

如果不是,它仍然会保存button文本。 当您在debugging器中检查对象时,它将在那里。 但它不会实际更新视图。