การเปลี่ยนข้อความของ UIButton อย่างรวดเร็วโดยทางโปรแกรม


222

คำถามง่ายๆที่นี่ ฉันมี UIButton, currencySelector และฉันต้องการเปลี่ยนข้อความโดยทางโปรแกรม นี่คือสิ่งที่ฉันมี:

currencySelector.text = "foobar"

Xcode ให้ข้อผิดพลาด "การประกาศที่คาดหวัง" ให้ฉัน ฉันทำอะไรผิดและฉันจะเปลี่ยนข้อความของปุ่มได้อย่างไร

คำตอบ:


595

ใน Swift 3, 4, 5:

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

มิฉะนั้น:

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

ยังมีมีการประกาศสำหรับ@IBOutletbutton


32
UIControlStateคุณสามารถละเว้น เช่นforState: .Normal
funroll

11
ตอนนี้ Swift3 เป็น.normalตัวพิมพ์เล็ก
Matthew

6
Swift3 เปลี่ยนforStateเป็นfor
Mathew P. Jones

1
Swift3: self.btnBuy.setTitle ("ซื้อ", สำหรับ: UIControlState.normal)
Thiru

5
สำหรับรวดเร็ว 4 ด้วย button.setTitle("Button Title",for: .normal)ใช้งานได้! ขอบคุณ
Rakshitha Muranga Rodrigo

74

เพียงคำอธิบายสำหรับผู้ที่เพิ่งเริ่มต้นใช้งานSwiftและการเขียนโปรแกรมiOS บรรทัดด้านล่างของรหัส:

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

ใช้กับIBOutletsไม่ใช่IBActionsเท่านั้น

ดังนั้นหากแอปของคุณใช้ปุ่มเป็นฟังก์ชั่นในการเรียกใช้รหัสบางอย่างพูดเล่นเพลงและคุณต้องการเปลี่ยนชื่อจากPlayเป็นPauseตามตัวแปรสลับคุณต้องสร้างIBOutletปุ่มขึ้นมาด้วย

ถ้าคุณลองใช้ button.setTitleกับIBActionข้อผิดพลาดคุณจะได้รับข้อผิดพลาด มันชัดเจนเมื่อคุณรู้ แต่สำหรับ noobs (เราทุกคน) นี่เป็นคำแนะนำที่เป็นประโยชน์


1
ใช่ฉันจะ google ตรงนี้จนกว่าฉันจะเห็นคำตอบของคุณ ขอบคุณ! +1
Evernoob

1
มันเป็นรูปแบบใน IOS ที่ใช้เวลาสักครู่ในการค้นหา มีคุณสมบัติของรายการ UI ที่คุณไม่สามารถเข้าถึงได้เว้นแต่ว่า IBOutlet จะถูกสร้างขึ้น หากคุณพยายามเปลี่ยนคุณลักษณะของ UI และไม่สามารถเข้าถึงได้ตรวจสอบให้แน่ใจว่าคุณมีทั้ง IBAction ที่กำลังเรียกใช้รหัสบางส่วนและ IBOutlet ที่ให้การเข้าถึงคุณลักษณะดังกล่าว
Bendrix

8
คำตอบนี้ไม่สมเหตุสมผล senderของการกระทำที่จะเป็นปุ่ม senderคุณสามารถใช้สิ่งที่คุณต้องการไป คุณไม่จำเป็นต้องมีเต้าเสียบเพื่อทำสิ่งนี้
rmaddy

2
Bendix ทั้งคำตอบและความคิดเห็นของเขาไม่ถูกต้อง พวกเขาผิดธรรมดา
vikingosegundo

คำถามไม่ได้กล่าวถึงตัวสร้างส่วนต่อประสานที่ผิดพลาดเพื่อสันนิษฐานว่าเป็นกรณีนี้
Edward

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 ที่มี Title Attributed คุณต้องใช้:

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

swift 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

ในการตั้งชื่อสำหรับปุ่มใน Xcode โดยใช้ swift - 04: ก่อนอื่นให้สร้างวิธีที่เรียกว่า setTitle พร้อมชื่อพารามิเตอร์และสถานะ UIController ดังนี้

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

}

และจำวิธีนี้ในวิธีการกระทำของปุ่มเช่น;

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