Thay đổi văn bản của UIButton nhanh chóng theo chương trình


222

Câu hỏi đơn giản ở đây. Tôi có một UIButton, tệSelector và tôi muốn thay đổi văn bản theo chương trình. Đây là những gì tôi có:

currencySelector.text = "foobar"

Xcode cho tôi lỗi "Tuyên bố dự kiến". Tôi đang làm gì sai và làm cách nào để thay đổi văn bản của nút?

Câu trả lời:


595

Trong Swift 3, 4, 5:

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

Nếu không thì:

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

Ngoài ra một @IBOutletphải khai báo cho button.


32
Bạn có thể bỏ qua UIControlState. ví dụforState: .Normal
funroll

11
Swift3 hiện đang .normallưu ý trường hợp thấp hơn
Matthew

6
Swift3 đổi forStatethànhfor
Mathew P. Jones

1
Swift3: self.btnBuy.setTitle ("Mua", cho: UIControlState.n normal)
Thiru

5
cho swift 4 cũng hoạt button.setTitle("Button Title",for: .normal)động!, cảm ơn
Rakshitha Muranga Rodrigo

74

Chỉ cần làm rõ cho những người mới lập trình SwiftiOS . Dưới đây là dòng mã:

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

chỉ áp dụng cho IBOutlets, không IBActions.

Vì vậy, nếu ứng dụng của bạn đang sử dụng một nút như một chức năng để thực hiện một số mã, nói chơi nhạc, và bạn muốn thay đổi tiêu đề từ Playđể Pausedựa trên một biến chuyển đổi, bạn cũng cần phải tạo ra một IBOutletcho nút đó.

Nếu bạn cố gắng sử dụng button.setTitlechống lại IBActionbạn sẽ gặp lỗi. Rõ ràng một khi bạn biết điều đó, nhưng đối với các noobs (tất cả chúng ta đều như vậy) thì đây là một mẹo hữu ích.


1
Đúng, tôi đã định google chính xác điều này cho đến khi tôi thấy câu trả lời của bạn. Cảm ơn! +1
Evernoob

1
Đó là một mẫu trong iOS khiến tôi mất một thời gian để khám phá. Có các thuộc tính của các mục UI mà bạn không có quyền truy cập trừ khi IBOutlet được tạo. Nếu bạn đang cố gắng thay đổi thuộc tính của UI và không thể truy cập nó, hãy đảm bảo bạn có cả IBAction đang chạy một số mã và IBOutlet cung cấp quyền truy cập vào các thuộc tính.
Bendrix

8
Câu trả lời này không có ý nghĩa. Các senderhành động sẽ là nút. Bạn có thể áp dụng bất cứ điều gì bạn muốn cho sender. Bạn không cần một lối thoát để làm điều này.
rmaddy

2
Cả Bendix và câu trả lời của ông đều không đúng. Họ hoàn toàn sai.
vikingosegundo

Câu hỏi không đề cập đến trình xây dựng giao diện nên rất sai khi cho rằng đó là trường hợp.
Edward

13

Swift 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
Tôi đã phải sử dụng UIControl.State. Nó nói UIControlState không được dùng nữa
HokiEJP

9

Swift 3:

Đặt tiêu đề nút:

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

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

9

Swift 5.0

// Standard State
myButton.setTitle("Title", for: .normal)

6

Thay đổi tiêu đề khi được quy là một chút khác nhau:

Tôi vừa gặp phải một vấn đề: Nếu bạn có một UIButton có Tiêu đề được gán, bạn phải sử dụng:

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

theo, theo Apple SetTitle Doc :

Nếu bạn đặt cả tiêu đề và tiêu đề được gán cho nút, nút đó sẽ thích sử dụng tiêu đề được gán cho tiêu đề này.

Tôi đã có một tiêu đề được quy cho và tôi đã cố gắng đặt Tiêu đề cho nó, không có hiệu lực ...


3

Swift 3

Khi bạn thực hiện @IBAction:

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

Điều này đặt người gửi là UIButton (thay vì Any) để nó nhắm mục tiêu btnAction là UIButton


2

nhanh chóng 4.2 trở lên

sử dụng nút IBOutlet

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

sử dụng IBAction của nút

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

0

Swift 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

Để đặt tiêu đề cho một nút trong Xcode bằng cách sử dụng swift - 04: trước tiên hãy tạo một phương thức gọi là setTitle với tiêu đề tham số và trạng thái UIContler như bên dưới;

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

}

và nhớ lại phương thức này trong phương thức hành động nút của bạn như;

yourButtonName.setTitle("String", for: .state)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.