การเปลี่ยนข้อความ UIButton


102

ดังนั้นฉันจึงพยายามอัปเดตข้อความบน UIButton เมื่อคลิก ฉันใช้บรรทัดต่อไปนี้เพื่อเปลี่ยนข้อความ:

calibrationButton.titleLabel.text = @"Calibration";

ฉันได้ตรวจสอบแล้วว่าข้อความมีการเปลี่ยนแปลง แต่เมื่อฉันเรียกใช้แอปและฉันคลิกที่ปุ่มข้อความนั้นจะเปลี่ยนเป็น "การปรับเทียบ" ในเสี้ยววินาทีจากนั้นจะกลับสู่ค่าเริ่มต้นทันที มีความคิดว่าเหตุใดจึงอาจเกิดขึ้น มีฟังก์ชันรีเฟรชบางประเภทที่ฉันต้องเรียกใช้หรือไม่?


1
อาจซ้ำกันของข้อความ UIButton TitleLabel
dasblinkenlight

คำตอบ:


248

เมื่อจัดวางมุมมองย่อย UIButton จะตั้งค่าข้อความของ titleLabel โดยใช้ค่าหัวเรื่องของตัวเองเพื่อให้คุณสามารถตั้งค่าสตริงที่แตกต่างกันได้ถึงสี่สตริงสำหรับสี่สถานะ (ปกติ, ไฮไลต์, เลือก, ปิดใช้งาน)

เนื่องจากคุณสมบัตินี้การตั้งค่าข้อความของ titleLabel จะไม่คงอยู่โดยตรงและปุ่มจะถูกรีเซ็ตเมื่อจัดวางมุมมองย่อย

นี่คือสิ่งที่คุณต้องทำเพื่อเปลี่ยนข้อความชื่อเรื่องสำหรับสถานะของปุ่ม

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

4
แล้ว button.titleLabel.text = @ "some text" ควรจะทำอย่างไร
Boris Gafurov

4
@BorisGafurov หากคุณพิมพ์เข้าไปbutton.titleLabelคุณจะเห็นว่า titleLabel เป็นคุณสมบัติแบบอ่านอย่างเดียวดังนั้นคุณสมบัติใด ๆ ของคุณสมบัติแบบอ่านอย่างเดียวจึงเป็นแบบอ่านอย่างเดียวเช่นกัน การใช้สัญลักษณ์จุดเพื่อแก้ไขจะไม่ได้ผลดังนั้นคุณต้องใช้วิธีการที่ชัดเจนเพื่อแก้ไข อย่างน้อยก็สมเหตุสมผลสำหรับฉัน
erdekhayser

1
ฉันคิดว่าฉันเสียเวลาไปประมาณสองชั่วโมงกว่าจะรู้เรื่องนี้ (ซึ่งน่าเศร้าที่ฉันคิดว่าฉันรู้แล้ว!)
race_carr

ขอบคุณสำหรับคำตอบ.
dinesharjani

3
@erdekhayser จริงๆแล้วคุณสมบัติอ่านอย่างเดียวสามารถมีคุณสมบัติอ่าน / เขียนได้ ฉันใช้แท็กของ titlelabel เพื่อส่งจำนวนเต็มไปยังวิธีการดำเนินการ ดูลิงก์ เอกสารของ Apple ด้วยAlthough 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

35

ในการตั้งค่าข้อความปุ่มใช้วิธีการต่อไปนี้:

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

ดูUIButtonการอ้างอิงคลาสสำหรับรายละเอียดเพิ่มเติม ... http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html

หรือใน Swift 3:

calibrationButton.setTitle("Calibration", for: .normal)

6

โดยทางโปรแกรมคุณสามารถตั้งชื่อปุ่มได้ดังนี้:

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

คุณยังสามารถตั้งค่าคุณสมบัติหัวเรื่องปุ่มจากกระดานเรื่องราว


2

ไม่ใช่เรื่องใหญ่และอาจชัดเจน แต่มีหลายสถานะสำหรับปุ่ม หากคุณระบุข้อความ "ผิด" คุณจะไม่เห็นข้อความเปลี่ยนแปลงตามที่ต้องการ

ฉันสังเกตเห็นว่าปุ่มของฉันไม่แสดงข้อความที่ฉันเพิ่มโดยใช้วิธีการที่แสดงไว้ที่นี่ ตรวจสอบลิงค์นี้เพื่อให้แน่ใจว่าคุณได้ให้ UIControlState ตามที่คุณต้องการ

อะไรคือความแตกต่างระหว่าง UIControlStateHighlighted และ UIControlStateSelected?


1

สำหรับ 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

สำหรับ 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

หากคุณไม่ต้องการตั้งหัวเรื่องสำหรับทุกสถานะเพียงแค่ตั้งเป็นสถานะปกติเนื่องจากชื่อสำหรับสถานะที่ไม่ได้ตั้งค่าจะเริ่มต้นเป็นชื่อของสถานะปกติ

btn.setTitle("Some text", for:.normal)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.