UIButton metnini değiştirme


102

Bu yüzden, bir UIButton'a tıkladığımda metni güncellemeye çalışıyorum. Metni değiştirmek için aşağıdaki satırı kullanıyorum:

calibrationButton.titleLabel.text = @"Calibration";

Metnin değiştiğini doğruladım, ancak uygulamayı çalıştırdığımda ve düğmeye tıkladığımda, bir saniye için "Kalibrasyon" olarak değişiyor ve ardından doğrudan varsayılan değerine geri dönüyor. Bunun neden olabileceğine dair bir fikriniz var mı? Aramam gereken bir tür yenileme işlevi var mı?


Yanıtlar:


248

Alt görünümlerini düzenlerken, bir UIButton, titleLabel'in metin değerini kendi başlık değerlerini kullanarak ayarlayacaktır, böylece dört durum için (normal, vurgulanmış, seçilmiş, devre dışı) dört farklı dize ayarlayabilirsiniz.

Bu özellik nedeniyle, titleLabel'in metninin doğrudan ayarlanması kalıcı olmayacak ve alt görünümlerini düzenlediğinde düğme tarafından sıfırlanacaktır.

Bu, bir düğmenin durumunun başlık metnini değiştirmek için yapmanız gereken şeydir.

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

4
o zaman button.titleLabel.text = @ "bir metin" in ne yapması gerekiyor?
Boris Gafurov

4
@BorisGafurov button.titleLabelYazarsanız, titleLabel'in salt okunur bir özellik olduğunu görürsünüz ve bu nedenle, salt okunur bir özelliğin özelliklerinden herhangi biri de salt okunurdur. Bunları düzenlemek için nokta notasyonu kullanmak işe yaramayacağından, bunları düzenlemek için açık yöntemlere ihtiyacınız vardır. Bu en azından benim için mantıklı.
erdekhayser

1
Sanırım bunu fark edene kadar yaklaşık iki saatimi boşa harcadım (ne yazık ki zaten bildiğimi düşünüyorum!)
race_carr

Cevabınız için teşekkürler.
dinesharjani

3
@erdekhayser Aslında salt okunur özellikler CAN / yazma özelliklerini okudum. Bir eylem yöntemine bir tamsayı geçirmek için titlelabel etiketini kullanıyorum. Ayrıca Apple'ın dokümanları bağlantısına bakın 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


6

programlı olarak düğme başlığını aşağıdaki gibi ayarlayabilirsiniz:

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

Ayrıca film şeridinden düğme başlığı özelliğini de ayarlayabilirsiniz.


2

Çok büyük bir sorun değil ve muhtemelen açık, ancak düğmeler için kullanılabilen birkaç durum var. 'Yanlış' olanı sağlarsanız, metnin istenen şekilde değiştiğini görmezsiniz.

Burada gösterilen yöntemleri kullanarak, düğmemin eklediğim metni göstermediğini fark ettim. Amaçladığınız UIControlState'i sağladığınızdan emin olmak için bu bağlantıyı kontrol edin.

UIControlStateHighlighted ve UIControlStateSelected arasındaki fark nedir?


1

Swift 3.0 için

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 için:

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

Tüm durumlar için başlığı ayarlamak istemiyorsanız, bunu normal duruma ayarlamanız yeterlidir, çünkü ayarlanmamış durumların başlığı varsayılan olarak normal durumun başlığını alacaktır.

btn.setTitle("Some text", for:.normal)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.