2013-02-22 12 views
9

UIButton s'nin başlığını dinamik olarak güncellemeye çalışıyorum. Ben seçildiğinde başlıkUIButton -setTitle: forState: işe yaramıyor

  • 'S' harfi olarak ayarlanmalıdır bekliyoruz ve
  • metin "D | S" devre dışı bırakıldığında ve seçilmiş.

Çalışmıyordu, bu yüzden titleForState: s basılmış ve başlık düzgün ayarlanmadı gibi görünüyor. setTitle: forState:'u doğru kullanıyor muyum? İki durumda da UIControlStateSelected derleyici karıştırmayın yapmak için

2013-02-21 21:05:36.070 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.072 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.073 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.073 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.073 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.074 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.074 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.074 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.075 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.075 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.076 Buttons[37130:c07] D|S D|S   0 1 
2013-02-21 21:05:36.076 Buttons[37130:c07] D|S D|S   0 1 

cevap

0
[button setTitle:@"S" forState:UIControlStateSelected]; 
     [button setTitle:@"D|S" forState:UIControlStateSelected|UIControlStateDisabled]; 

setTitle:

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *buttons; 
... 
- (void)updateUI // Calling this from IBAction 
{ 
    for(UIButton *button in self.buttons) { 
     [button setTitle:@"S" forState:UIControlStateSelected]; 
     [button setTitle:@"D|S" forState:UIControlStateSelected|UIControlStateDisabled]; 

     NSLog(@"%@ %@ %@ %@ %d %d", 
       [button titleForState:UIControlStateSelected], 
       [button titleForState:UIControlStateSelected], 
       [button titleForState:UIControlStateNormal], 
       [button titleForState:UIControlStateSelected|UIControlStateDisabled], 
       button.selected, 
       button.enabled); 
    } 
} 

İşte konsol çıkış var. Durumu bir kerede yürütme şansı vardır. İkinci satırdaki kodu değiştirmeyi deneyin ... Mutlu Kodlama Yapın

+0

ben referans başka bir yol göremiyorum. Bunu yapmak için başka bir yöntem var mı? – ydmm

1

Çok farklı şeyler denedikten sonra, çalışmamın tek yolu aşağıdaki gibidir. Ancak bu bir C stili mantıktır ve seçilen ve devre dışı bırakılmış UIButton kontrol durumunun anlamını değiştirir. IB attributedTitle yerine title ayarlar nedeniyle kesinlikle bir hack :(

//  [cardButton setTitle:card.contents 
//     forState:UIControlStateSelected|UIControlStateDisabled]; 
if(cardButton.selected && !cardButton.enabled) { 
    [cardButton setTitle:card.contents forState:UIControlStateNormal]; 
} 
19

İşe yaramıyor

yerine bu deneyin:. Alternatif olarak

NSAttributedString *attributedTitle = [self.myButton attributedTitleForState:UIControlStateNormal]; 
NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithAttributedString:attributedTitle]; 
[mas.mutableString setString:@"New Text"]; 

[self.myButton setAttributedTitle:mas forState:UIControlStateNormal]; 

Veya:

[self.myButton setAttributedTitle:nil forState:UIControlStateNormal]; 
[self.myButton setTitle:@"New Text" forState:UIControlStateNormal]; 

(İkinci seçenek, biçimlendirmenizi korumaz.)