Saya memiliki UIButton
, yang ketika ditekan, menampilkan tampilan baru di mana pengguna dapat mengubah beberapa pengaturan. Saat tampilan ditutup, saya ingin memperbarui judul / teks UIButton
untuk mencerminkan keadaan baru. Saya menelepon:
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
Tetapi sepertinya tidak pernah berubah dari teks / judul asli sebagaimana ditentukan dalam IB.
ios
iphone
uibutton
uicontrolstate
George Armhold
sumber
sumber
Jawaban:
Apakah Anda memiliki tombol yang ditentukan sebagai IBOutlet di kelas pengontrol tampilan Anda, dan apakah itu terhubung dengan benar sebagai outlet di Interface Builder (ctrl seret dari outlet referensi baru ke pemilik file dan pilih objek UIButton Anda)? Biasanya itulah masalah yang saya alami ketika saya melihat gejala-gejala ini.
Sunting: Meskipun tidak demikian, hal seperti ini juga dapat terjadi jika Anda menyetel judul yang dikaitkan ke tombol, lalu Anda mencoba mengubah judul dan bukan judul yang dikaitkan.
sumber
Saya memecahkan masalah hanya dengan mengatur parameter judul untuk UIControlStateNormal, dan secara otomatis bekerja di negara bagian lain. Masalahnya tampaknya ketika Anda mengatur UIControlState lain.
sumber
Mulai Swift 4:
sumber
Saya menemukan masalah lain. Ini mungkin bug yang diperkenalkan di iOS 5, tapi saya pikir saya akan menunjukkannya kepada siapa pun yang menemuinya.
Jika Anda tidak menyetel teks default apa pun untuk tombol di XIB, tidak ada teks yang akan muncul jika Anda menyetelnya secara terprogram. Dan jika Anda mengatur teks di XIB, teks apa pun yang Anda tetapkan ke tombol secara terprogram akan dipotong ke ukuran teks default.
Dan terakhir, jika Anda menampilkan tampilan dengan tombol Anda dan kemudian memanggil tampilan lain (seperti ActionSheet) dan kemudian menutupnya, teks yang Anda tetapkan ke tombol secara terprogram akan dihapus dan judul tombol akan kembali ke apa pun yang Anda tetapkan di XIB.
sumber
Meskipun masalah Caffeine Coma telah teratasi, saya ingin menawarkan penyebab potensial lain untuk judul tidak muncul di UIButton.
Jika Anda mengatur gambar untuk UIButton menggunakan
Itu bisa menutupi judul. Saya menemukan ini dengan cara yang sulit dan membayangkan beberapa dari Anda akhirnya membaca halaman ini karena alasan yang sama.
Gunakan metode ini sebagai gantinya
untuk gambar tombol dan judul tidak akan terpengaruh.
Saya menguji ini dengan tombol dan tombol yang dibuat secara terprogram yang dibuat dalam .xib
sumber
untuk cepat:
sumber
Ternyata dokumen memberi tahu Anda jawabannya! UIButton akan mengabaikan perubahan judul jika sudah memiliki Attributed String untuk digunakan (tampaknya menjadi default yang Anda dapatkan saat menggunakan Xcode interface builder).
Saya menggunakan yang berikut ini:
sumber
Satu lagi kemungkinan penyebabnya adalah ini:
Jika Anda mencoba menyetel judul tombol dalam
(id)initWithNibName: ...
metode tersebut, properti tombol Anda akan tetap nihil. Ini belum ditugaskan ke UIButton.Anda harus yakin bahwa Anda menyetel tombol dengan metode seperti
(void)viewWillLoad
atau(void)viewWillAppear
, tetapi Anda mungkin tidak ingin menyetelnya selambat-lambatnya(void)viewDidAppear
.sumber
Terkadang bisa menjadi sangat rumit. Cara termudah adalah dengan " menyegarkan " tampilan tombol!
sumber
Saya terus mengalami masalah dengan ini, satu-satunya solusi adalah menambahkan gambar dan label sebagai subview ke uibutton. Kemudian saya menemukan bahwa masalah utamanya adalah saya menggunakan UIButton dengan judul: Attributed. Ketika saya mengubahnya menjadi Plain, cukup mengatur titleLabel.text sudah cukup!
sumber
@unroll benar sekali. Di sini Anda dapat melihat apa yang Anda perlukan. Pastikan fungsi hanya berjalan di thread utama . Jika Anda tidak ingin berurusan dengan utas Anda dapat melakukan seperti ini misalnya: membuat NSUserDefaults dan dalam kondisi cheking ViewDidLoad ditekan tombol di View lain atau tidak (di View lain yang ditetapkan di NSUserDefaults informasi yang dibutuhkan) dan tergantung pada kondisi set judul yang diperlukan untuk UIButton Anda, jadi [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
sumber
Pastikan Anda berada di utas utama.
Jika tidak, teks tombol masih akan disimpan. Ini akan ada di sana saat Anda memeriksa objek di debugger. Tapi itu tidak benar-benar memperbarui tampilan.
sumber