2013-02-22 54 views
9

काम नहीं कर रहा प्रतीत होता है मैं UIButton एस के IBOutletCollection के शीर्षक को गतिशील रूप से अपडेट करने का प्रयास कर रहा हूं। मैं जब चयनित शीर्षकUIButton -setTitle: forState:

  • वर्णाक्षर 'S' के लिए सेट होने की उम्मीद है और
  • पाठ 'डी | एस "जब विकलांग और का चयन किया।

यह काम नहीं कर रहा था, इसलिए मैंने titleForState: एस मुद्रित किया और ऐसा लगता है कि शीर्षक ठीक से सेट नहीं हो रहा है। क्या मैं setTitle: forState: सही ढंग से उपयोग कर रहा हूं?

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 

उत्तर

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

setTitle दो मामलों में UIControlStateSelected संकलक भ्रमित कर के लिए:

@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); 
    } 
} 

यहाँ सांत्वना उत्पादन है। एक ही समय में दोनों स्थितियों को निष्पादित करने का मौका है। कोड को दूसरी पंक्ति में बदलने का प्रयास करें .. एक हैप्पी कोडिंग

+0

मुझे संदर्भ में कोई अन्य तरीका नहीं दिख रहा है। क्या ऐसा करने के लिए कोई और तरीका है? – ydmm

1

कई अलग-अलग चीजों की कोशिश करने के बाद, मुझे यह काम करने का एकमात्र तरीका नीचे जैसा है। लेकिन यह एक सी-शैली तर्क है और चयनित और अक्षम UIButton नियंत्रण स्थिति का अर्थ बदलता है। निश्चित रूप से एक हैक :(

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

यह काम नहीं कर रहा है क्योंकि आईबी attributedTitle बजाय title सेट

बजाय इस प्रयास करें:। वैकल्पिक रूप से

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

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

या,:

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

(दूसरा विकल्प आपके स्वरूपण को सुरक्षित नहीं रखेगा।)

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^