2013-02-22 8 views
9

IBOutletCollectionのタイトルを動的に更新しようとしています。UIButtonです。私が選択したときにタイトルがUIButton -setTitle:forState:動作していないようです。

  • 文字「S」に設定されることを期待して
  • テキスト「D | S」無効の場合、選択しました。

それは働いていなかったので、titleForState:を印刷しました。タイトルが正しく設定されていないようです。 setTitle: forState:を正しく使用していますか? 2例でUIControlStateSelectedは、コンパイラの混乱を作るため

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:

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

は、ここでコンソール出力です。両方の条件を同時に実行する機会があります。 2行目のコードを変更してみてください。ハッピーコーディングをしてください。

+0

参考までに他の方法はありません。それを行う他の方法はありますか? – ydmm

1

さまざまなことを試した後、私がそれを動作させる唯一の方法は以下の通りです。しかし、これはCスタイルのロジックであり、選択されたUIButtonコントロール状態と無効なUIButtonコントロール状態の意味を変更します。 。確かにハック:(

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

IBは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]; 

( 2番目のオプションは書式を保持しません)

関連する問題