세그먼트 컨트롤바의 배경, 글자 색상을 어떻게 각각 바꿔줄 수 있을까요?

안녕하세요! 닥터솔저 팀입니다. 날씨가 점점 따뜻해지는걸 보니, 최종 프로젝트 발표일이 다가오는걸 느끼네요…

####저는 5개의 세그먼트가 있는데, 각각의 세그먼트들의 배경 색상과 각각의 text색상을 다르게 설정해주고 싶습니다.

구글링 결과 아래 subview를 만들어서 넣으라는 분이 있었는데, subview를 넣어보니, 현재 무엇이 select 되었는지 안보이게 되었습니다….

var subViewOfSegment: UIView = mySegmentedControl.subviews[0] as UIView
subViewOfSegment.tintColor = UIColor.blueColor()

이미지로 만들어서 넣으라고 하시분도 있었는데, 아래의 함수를 사용하여 색상이 있을때 해당 색상의 사각형 이미지를 반환하여 넣어주라고 하셨는데, 검은색 색상만 나옵니다.

 private func imageWithColor(color: UIColor) -> UIImage {
        let rect = CGRect(x: 0.0, y: 0.0, width:  1.0, height: 1.0)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()
        context!.setFillColor(color.cgColor);
        context!.fill(rect);
        let image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image!
    }

어떻게 해결할 수 있을까요?

좋아요 1

저기 setBackgroundImage 에 control.state 별로 이미지를 구분해서 넣어주면 될 것 같은데요?!

찾아본 결과

normal : 컨트롤의 일반 또는 기본 상태.
highlighted : 컨트롤의 강조된 상태.
disabled : 컨트롤의 비활성 상태.
selected : 컨트롤의 선택된 상태.
focused : 컨틀롤의 포커스된 상태.
application : 응용 프로그램에서 사용할 수 있는 추가 제어 상태 플래그.
reserved : 내부 프레임 워크 사용을 위해 예약된 제어 상태 플래그.

이와 같은 컨트롤 스태이트가 존재하는 것 같은데, 상태에 따른 색상이 아닌, 기본상태도 인덱스에 따라 색상을 변경할 수 있을까요?

좋아요 1

세그먼티드 컨트롤은 문자(String) 외에도 이미지(UIImage) 기반으로 만들 수 있어요. 다음 2가지 방법이 있을 듯 하네요.

  • 각 세그먼트에 맞는 이미지를 준비
  • UILabel에서 UIImage 만들기(UIView → UIImage 구글링하면 나옵니다.)
좋아요 3