2013-07-24 3 views
3

UIButtontitleColor을 선택하고 강조 표시 할 때 특정 색상으로 설정하려하지만 사용자가 터치 할 때 버튼이 선택되도록 설정해야합니다. UIButtonUIButton 제목 선택시 색상 및 강조 표시

[button setTitleColor:normalColor forState:UIControlStateNormal]; 
[button setTitleColor:superDuperSpecialColor forState:UIControlStateHighlighted]; 
[button setTitleColor:superDuperSpecialColor forState:UIControlStateSelected]; 
[button addTarget:self 
      action:@selector(action:) 
forControlEvents:UIControlEventTouchDown]; 

그러나 버튼을 [senderButton setSelected:YES]을 사용하여 action: 방법 선택됩니다 때, 그것은으로, 그것이 있어야하는, 오히려 superDuperSpecialColor보다는 titleColornormalColor 설정 :

그래서처럼 설정 한 강조 표시되어 선택되었습니다.

전화가 전화를 걸면 버튼이 선택되지 않고 선택된 채로 머무르는 것을 방지하고 강조 표시된 상태 색상을 주석 처리해도 아무런 효과가없는 것 같습니다.

내가 하이라이트 후 setSelected:를 호출하기 위해 UIControlEventTouchCancel, UIControlEventTouchUpInsideUIControlEventTouchUpOutside의 대상을 추가해야합니다은 - 또는 - 버튼 터치를 얻을 수 superDuperSpecialColorUIControlStateNormal에 대한 titleColor을 변경 종료? 보조 노트에

은, 그래서 같은 titleColor을 설정 좋아하는 것 :

[button setTitleColor:superDuperSpecialColor 
      forState:(UIControlStateHighlighted | UIControlStateSelected)]; 

그러나 그것은 작동하지 않습니다. 왜 그런가요? Objective-C가 상태 동등성을 검사합니까?

+0

는 정상적인 색상을 시작하고 또한 정상 있도록 선택한 설정하면, 당신은 색으로 전혀 어떤 일이 일어나고 있는지 확신합니까? –

+0

@MarcusAdams superDuperSpecialColor' '를 선택한 세트를로 설정하지만, 단지 버튼을 때 버튼 하이라이트와 동일 압하시에서'selected'을대로 버튼 AFTER 색이 강조되지 않도록 도시 . – RileyE

답변

4

결과를 확인한 결과, iOS의 버그 인 것 같습니다. 시뮬레이터와 장치 (iOS 6.1)에서 모두 실패합니다. 선택한 상태 및 강조 표시된 상태가 둘 다 YES 인 경우 선택한 설정이 강조 표시된 설정을 무시해야합니다. 대부분 그런 식으로 구현됩니다. 버튼의 텍스트 값은 이와 같이 작동하지만 색상이 잘못 표시되는 것처럼 보입니다 (기본값은 보통입니다).

최신 XCode가있는 경우 iOS 7을 사용하여 해결할 수 있습니다. 그렇지 않으면 버그로 신고하십시오.

selectedUIButton에 일반적으로 사용되는 상태가 아니기 때문에 다른 주와 함께 적절하게 테스트하지 않았을 수 있습니다.

해결 방법으로 action 방법에서 일반 상태의 색을 superDuperSpecialColor으로 설정하고 터치 업 이벤트의 다른 동작을 추가하여 정상 색을 다시 정상으로 설정할 수 있습니다. 버튼을 누르는 동안의 상태는 결코 정상적인 것이 아니기 때문에, 미래에 그것을 고치면 아무 것도 깨지지 않습니다.

+1

그게 내가 구현을 마쳤다 고, 고마워. 나는 또한 iOS 7에서 테스트했는데 동일한 결과를 얻은 것 같습니다. 나는 그것이 엉망인 IOS라고 생각합니다.이 경우에는 뇌가 아닙니다! – RileyE

0

작성시 UIButton 유형을 확인해야한다고 생각합니다. 이런 코드가있어서 잘 작동합니다.

하지만 상태를 한 줄에 두 상태로 설정해도 작동하지 않습니다.

[button setTitleColor:superDuperSpecialColor 
      forState:(UIControlStateHighlighted | UIControlStateSelected)]; 
+0

'[[UIButton alloc] initWithFrame :]'을 사용하고 있으므로 타입이 없습니다. – RileyE

+0

또한 'UIControlEventTouchDown'을 사용하고 있는지 확인하고 터치 다운시 호출되는 메소드 내에서'UIButton'의'selected' 속성을'YES'로 설정합니까? – RileyE

+0

내 코드, 프레임으로 버튼을 초기화하는 중, 스토리 보드에서 생성 된 버튼으로 테스트 중, 모두 작동합니다. [button setTitleColor : [UIColor grayColor] forState : UIControlStateNormal]; [button setTitleColor : [UIColor redColor] forState : UIControlStateHighlighted]; [button setTitleColor : [UIColor greenColor] forState : UIControlStateSelected]; [button addTarget : 자기 동작 : @ 선택기 (동작 :) forControlEvents : UIControlEventTouchDown]; // [button setSelected : YES]; - (무효) 액션 (ID) 보낸 사람 { NSLog ("보낸 사람"@); [button setSelected : YES]; – Elto

1

강조 표시 한 상태에서만 제목이 정상 상태에서 가져온 반면 선택 및 강조 표시된 상태 모두 제목을 설정해야합니다.

[button setTitleColor:UIColor.blackColor forState:UIControlStateSelected]; 
[button setTitleColor:[UIColor.blackColor colorWithAlphaComponent:0.5f] 
       forState:UIControlStateSelected | UIControlStateHighlighted]; 

[button setTitle:@"Title" forState:UIControlStateSelected]; 
[button setTitle:@"Title" forState:UIControlStateSelected | UIControlStateHighlighted]; 

Сode이 아래에 강조 상태에 대해 명시 적으로 설정을 제목없이 잘 작동 : 그래서, 여분의 줄을 추가하는 것을 잊지 마세요

[button setTitleColor:UIColor.greyColor forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor.greyColor colorWithAlphaComponent:0.5f] 
      forState:UIControlStateHighlighted]; 

[button setTitle:@"Title" forState:UIControlStateNormal];