Mengubah teks UIButton

102

Jadi saya mencoba memperbarui teks pada UIButton ketika saya mengkliknya. Saya menggunakan baris berikut untuk mengubah teks:

calibrationButton.titleLabel.text = @"Calibration";

Saya telah memverifikasi bahwa teks berubah, tetapi ketika saya menjalankan aplikasi dan saya mengklik tombol, itu berubah menjadi "Kalibrasi" untuk sepersekian detik dan kemudian kembali ke nilai defaultnya. Ada ide mengapa ini mungkin terjadi? Apakah ada semacam fungsi penyegaran yang perlu saya panggil?

Julian Coltea
sumber
1
kemungkinan duplikat teks iPhone UIButton TitleLabel?
dasblinkenlight

Jawaban:

248

Saat menyusun subview, UIButton akan menyetel nilai teks titleLabel menggunakan nilai judulnya sendiri, sehingga Anda dapat mengatur hingga empat string berbeda untuk empat status (normal, disorot, dipilih, dinonaktifkan).

Karena fitur ini, pengaturan teks titleLabel secara langsung tidak akan bertahan, dan akan diatur ulang oleh tombol saat mengatur subview.

Inilah yang harus Anda lakukan untuk mengubah teks judul untuk status tombol.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
Jesse Gumpo
sumber
4
jadi apa yang harus dilakukan oleh button.titleLabel.text = @ "some text"?
Boris Gafurov
4
@BorisGafurov Jika Anda mengetik button.titleLabel, Anda akan melihat bahwa titleLabel adalah properti hanya-baca, sehingga semua properti hanya-baca juga hanya-baca. Menggunakan notasi titik untuk mengeditnya tidak akan berfungsi, jadi Anda memerlukan metode eksplisit untuk mengeditnya. Setidaknya ini masuk akal bagi saya.
erdekhayser
1
Saya pikir saya menyia-nyiakan sekitar dua jam sampai saya menyadari ini (yang sayangnya saya pikir saya sudah tahu!)
race_carr
Terima kasih atas jawaban anda.
dinesharjani
3
@erdekhayser Sebenarnya, properti hanya-baca DAPAT memiliki properti baca / tulis. Saya menggunakan tag label judul untuk meneruskan integer ke metode tindakan. Lihat juga tautan dokumen 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

secara terprogram Anda dapat mengatur judul tombol seperti di bawah ini:

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

Anda juga dapat mengatur properti judul tombol dari storyboard.

bhautikmewada191
sumber
2

Bukan masalah besar, dan mungkin sudah jelas, tetapi ada beberapa status yang tersedia untuk tombol. Jika Anda memberikan yang 'salah', Anda tidak akan melihat perubahan teks seperti yang diinginkan.

Saya perhatikan bahwa tombol saya tidak menampilkan teks yang saya tambahkan, menggunakan metode yang ditunjukkan di sini. Periksa tautan ini untuk memastikan Anda memberikan UIControlState yang Anda inginkan.

Apa perbedaan antara UIControlStateHighlighted dan UIControlStateSelected?

pengguna3429534
sumber
1

Untuk 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)
Stephen Chen
sumber
1

Untuk 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)
Suraj Sonawane
sumber
1

Jika Anda tidak ingin menyetel judul untuk semua status, cukup setel ke status normal karena judul untuk status yang tidak disetel akan default ke judul status normal.

btn.setTitle("Some text", for:.normal)
Johan Franzén
sumber