2016-09-22 1 views
1

:uisegment 제어 I는 다음과 같이 할 UISegmentControl을 사용자 정의하는 노력했습니다

enter image description here

UISegmentControl에서 레이블을 통해

우선 루프 내가하려고 할 때 여러 각을 설정하지만, 글꼴을 변경하지 않는 레이블 텍스트 속성을 변경하십시오. 나는 보통의 UILabel의에이 속성을 사용하여 시도하고 작동하지만,하지 uisegment

[segmentedControl.subviews enumerateObjectsUsingBlock:^(UIView * obj, NSUInteger idx, BOOL *stop) { 
     [obj.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
      if ([obj isKindOfClass:[UILabel class]]) { 
       //Multiline 
       UILabel *_tempLabel = (UILabel *)obj; 
       [_tempLabel setNumberOfLines:0]; 

       NSMutableAttributedString *attString = 
          [[NSMutableAttributedString alloc] 
            initWithString: @"monkey goat"]; 

[attString addAttribute: NSForegroundColorAttributeName 
       value: [UIColor redColor] 
       range: NSMakeRange(0,6)]; 


[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Helvetica" size:15] 
       range: NSMakeRange(0,6)]; 

[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Didot" size:24] 
       range: NSMakeRange(7,4)]; 

_tempLabel.attributedText = attString; 
      } 
     }]; 
    }]; 

내에서 다음은 결과입니다 작품을 볼 부착

enter image description here

변경 label 속성 :

NSMutableAttributedString *attString = 
          [[NSMutableAttributedString alloc] 
            initWithString: @"monkey goat"]; 

[attString addAttribute: NSForegroundColorAttributeName 
       value: [UIColor redColor] 
       range: NSMakeRange(0,6)]; 


[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Helvetica" size:15] 
       range: NSMakeRange(0,6)]; 

[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Didot" size:24] 
       range: NSMakeRange(7,4)]; 

self.label.attributedText = attString; 

레이블 변경 속성 링크 : Different font size in the same label?

답변

1

UISegmentedControl은 수행하려는 작업을 지원하지 않습니다. API는 'setTitleTextAttributes : forState :'메소드를 사용하여 모든 세그먼트 제목에 대해 단일 글꼴 설정 만 지원합니다.

결국 분할 된 컨트롤은 개인 하위 뷰를 파기 한 후 설정할 수있는 특성을 재설정합니다. API와 싸우는 것은 결코 좋은 생각이 아니며 뷰의 문서화되지 않은 하위 뷰를 파헤 치는 것도 좋은 생각이 아닙니다. 이러한 솔루션은 때때로 작동하지만 향후 iOS 업데이트가 제공되면 대부분 중단 될 수 있습니다.

유일한 옵션은 원하는 것을 수행하거나 다른 사람이 만든 사용자 정의 컨트롤을 만드는 것입니다.

1

하지 마십시오. 분할 된 컨트롤은있는 그대로 사용하도록되어 있습니다. 내부 뷰 계층 구조는 비공개이며 OS 버전간에 변경 될 수 있습니다. 제어 장치 내부에 도달하면 모든 배팅이 해제됩니다. 당신이 오늘 그것을 작동 시키더라도, 미래의 OS 버전이 당신을 망칠 수 있습니다.

세그먼트 화 된 컨트롤을 사용자 정의하려면 처음부터 직접 빌드하십시오. 그리 어렵지 않습니다. 사실 그것은 당신이하려고하는 것보다 더 쉬울 것이며 확실히 안전합니다.

관련 문제