以编程方式快速更改UIButton的文本


222

这里的简单问题。我有一个UIButton,currencySelector,并且我想以编程方式更改文本。这是我所拥有的:

currencySelector.text = "foobar"

Xcode给我错误“期望的声明”。我在做什么错,如何更改按钮的文本?

Answers:


595

在Swift 3、4、5中:

button.setTitle("Button Title", for: .normal)

除此以外:

button.setTitle("Button Title", forState: UIControlState.Normal)

@IBOutlet必须为声明button


32
你可以省略UIControlState。例如forState: .Normal
funroll

11
现在.normal请注意Swift3 的小写字母
马修

6
Swift3更改forStatefor
Mathew P. Jones

1
Swift3:self.btnBuy.setTitle(“ Buy”,for:UIControlState.normal)
Thiru

5
迅速4也button.setTitle("Button Title",for: .normal)有效!,谢谢
Rakshitha Muranga Rodrigo '18年

74

这只是对SwiftiOS编程新手的说明。下面的代码行:

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

仅适用于IBOutlets,不适用于IBActions

所以,如果您的应用使用一个按钮的功能,以执行一些代码,说播放音乐,并希望标题从改变PlayPause基于一个切换变量,您还需要创建一个IBOutlet该按钮。

如果您尝试对进行使用button.setTitleIBAction则会收到错误消息。一旦您知道它就很明显,但是对于新手(我们都是),这是一个有用的提示。


1
是的,在我看到你的答案之前,我正要用谷歌搜索这个。谢谢!+1
Evernoob

1
这是IOS中的一种模式,我花了一段时间才发现。除非创建了IBOutlet,否则某些UI项目的属性是您无法访问的。如果您尝试更改UI的属性而无法访问它,请确保同时具有运行某些代码的IBAction和提供对属性的访问的IBOutlet。
Bendrix

8
这个答案没有道理。该sender行动的将是按钮。您可以将所需的任何内容应用于sender。您不需要插座即可执行此操作。
rmaddy16年

2
Bendix的回答和他的评论均不正确。他们是完全错误的。
vikingosegundo

这个问题没有提到界面生成器,因此以为是错误的。
爱德华

13

斯威夫特5:

    let controlStates: Array<UIControl.State> = [.normal, .highlighted, .disabled, .selected, .focused, .application, .reserved]
    for controlState in controlStates {
        button.setTitle(NSLocalizedString("Title", comment: ""), for: controlState)
    }

1
我不得不使用UIControl.State。它说UIControlState已被弃用
HokiEJP

9

斯威夫特3:

设置按钮标题:

//for normal state:
my_btn.setTitle("Button Title", for: .normal)

// For highlighted state:
my_btn.setTitle("Button Title2", for: .highlighted)


6

归属时更改标题有些不同:

我只是遇到一个问题:如果您的UIButton带有属性标题,则必须使用:

my_btn.setAttributedTitle(NSAttributedString(string: my_title), for: my_state)

根据Apple SetTitle Doc

如果同时为按钮设置了标题和属性标题,则与该按钮相比,按钮更喜欢使用属性标题。

我有一个归属的标题,我试图在其上设置标题,但没有任何效果...


3

迅捷3

当您进行@IBAction时:

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("string goes here", for: .normal)
}

这将发送方设置为UIButton(而不是Any),因此将btnAction定位为UIButton


2

迅捷4.2及以上

使用按钮的IBOutlet

btnOutlet.setTitle("New Title", for: .normal)

使用按钮的IBAction

@IBAction func btnAction(_ sender: UIButton) {
  sender.setTitle("New Title", for: .normal)
}

0

迅捷3

let button: UIButton = UIButton()
button.frame = CGRect.init(x: view.frame.width/2, y: view.frame.height/2, width: 100, height: 100)
button.setTitle(Title Button, for: .normal)

0

要使用swift -04在Xcode中为按钮设置标题,请执行以下操作:首先创建一个名为setTitle的方法,其参数为title和UIController状态,如下所示;

func setTitle(_ title : String?, for state : UIControl.State)   {

}

并在您的按钮动作方法中调用此方法;例如

yourButtonName.setTitle("String", for: .state)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.