Thay đổi văn bản UIButton


102

Vì vậy, tôi đang cố gắng cập nhật văn bản trên UIButton khi tôi nhấp vào nó. Tôi đang sử dụng dòng sau để thay đổi văn bản:

calibrationButton.titleLabel.text = @"Calibration";

Tôi đã xác minh rằng văn bản đang thay đổi, nhưng khi tôi chạy ứng dụng và nhấp vào nút, nó sẽ chuyển thành "Hiệu chỉnh" trong tích tắc và sau đó quay lại ngay giá trị mặc định của nó. Bất kỳ ý tưởng tại sao điều này có thể xảy ra? Có loại chức năng làm mới nào mà tôi cần gọi không?


Câu trả lời:


248

Khi đặt các lần xem phụ của nó, UIButton sẽ đặt giá trị văn bản của titleLabel bằng cách sử dụng các giá trị tiêu đề của chính nó, để bạn có thể thiết lập tối đa bốn chuỗi khác nhau cho bốn trạng thái (bình thường, được đánh dấu, được chọn, bị vô hiệu hóa).

Do tính năng này, việc đặt trực tiếp văn bản của Nhãn tiêu đề sẽ không tồn tại và sẽ được đặt lại bằng nút khi nó đưa ra các lượt xem phụ.

Đây là những gì bạn phải làm để thay đổi văn bản tiêu đề cho trạng thái của nút.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
vậy thì button.titleLabel.text = @ "một số văn bản" sẽ phải làm gì?
Boris Gafurov

4
@BorisGafurov Nếu bạn nhập vào button.titleLabel, bạn thấy rằng titleLabel là một thuộc tính chỉ đọc và vì vậy bất kỳ thuộc tính nào của thuộc tính chỉ đọc cũng là chỉ đọc. Việc sử dụng ký hiệu dấu chấm để chỉnh sửa chúng sẽ không hoạt động và vì vậy bạn cần có các phương pháp rõ ràng để chỉnh sửa chúng. Điều này có ý nghĩa đối với tôi ít nhất.
erdekhayser

1
Tôi nghĩ rằng tôi đã lãng phí khoảng hai giờ cho đến khi tôi nhận ra điều này (điều đáng buồn là tôi nghĩ rằng tôi đã biết!)
race_carr

Cảm ơn câu trả lời của bạn.
dinesharjani

3
@erdekhayser Trên thực tế, thuộc tính chỉ đọc CÓ THỂ có thuộc tính đọc / ghi. Tôi sử dụng thẻ titlelabel để chuyển một số nguyên cho một phương thức hành động. Cũng xem liên kết tài liệu của AppleAlthough this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
Aaron


6

theo chương trình, bạn có thể đặt tiêu đề nút như sau:

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

bạn cũng có thể đặt thuộc tính tiêu đề nút từ bảng phân cảnh.


2

Không phải là một vấn đề lớn, và có thể rõ ràng, nhưng có một số trạng thái có sẵn cho các nút. Nếu bạn cung cấp 'sai', bạn sẽ không thấy văn bản thay đổi như mong muốn.

Tôi nhận thấy rằng nút của tôi không hiển thị văn bản tôi đã thêm, bằng cách sử dụng các phương pháp được hiển thị ở đây. Kiểm tra liên kết này để đảm bảo rằng bạn đang cung cấp UIControlState mà bạn dự định.

Sự khác biệt giữa UIControlStateHighlighted và UIControlStateSelected là gì?


1

Đối với Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)

1

Đối với Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)

1

Nếu bạn không muốn đặt tiêu đề cho tất cả các trạng thái, chỉ cần đặt tiêu đề cho trạng thái bình thường vì tiêu đề cho các trạng thái chưa được đặt sẽ mặc định là tiêu đề của trạng thái bình thường.

btn.setTitle("Some text", for:.normal)
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.