2013-02-22 3 views
9

IBOutletCollection의 제목을 UIButton으로 동적으로 업데이트하려고합니다. 나는 선택하면 제목이UIButton -setTitle : forState : 작동하지 않는 것 같습니다.

  • 문자 'S'로 설정 될 것으로 예상하고
  • 텍스트 "D | S"경우 무효 인.

작동하지 않아서 titleForState:을 인쇄했는데 제목이 제대로 설정되지 않은 것으로 보입니다. setTitle: forState:을 올바르게 사용하고 있습니까? 이가지 경우에 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); 
    } 
} 

다음은 콘솔 출력입니다. 한 번에 두 조건을 모두 실행할 기회가 있습니다. 두 번째 줄의 코드를 변경해보십시오. 해피 코딩을 해보십시오.

+0

참조에 다른 방법이 표시되지 않습니다. 그것을 할 다른 방법이 있습니까? – ydmm

1

많은 다른 것들을 시도한 후에, 내가 작동시키는 유일한 방법은 아래와 같습니다. 그러나 이것은 C 스타일의 로직이며 UIButton 컨트롤 상태의 선택 및 비활성화의 의미를 변경합니다. IB는 attributedTitle 대신 title 설정하기 때문에 확실히 해킹 :(

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

이 작동하지 않습니다

을 대신을 시도해보십시오. 대안

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

을 (두 번째 옵션은 서식을 유지하지 않습니다.)

관련 문제