iOS

[Swift 4.2] TabBar item title 색상변경

Jundol 2019. 1. 22. 14:26

꼼꼼한 재은씨의 스위프트 실전편 330p


버전업이 되면서 예문에 나오는 코드에서 변형이 있다.


change color and font in swift 4.2


원본

1
2
3
4
5
6
7
8
9
10
11
12
if let tbC = self.window?.rootViewController as? UITabBarController {
    if let tbItems = tbC.tabBar.items {
        for tbItem in tbItems {
            // 폰트 색상 변경
            tbItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor.rawValue: UIColor.gray], for: .disabled)          
            tbItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor.rawValue: UIColor.red], for: .selected)
          
              // 전체 아이템의 폰트 크기를 설정한다.
              tbItem.setTitleTextAttributes([NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 15)], for: .normal)        
        }
    }
}                    
cs


Swift 4.2

1
2
3
4
5
6
7
8
9
10
11
12
if let tbC = self.window?.rootViewController as? UITabBarController {
    if let tbItems = tbC.tabBar.items {
        for tbItem in tbItems {
            // 폰트 변경
            tbItem.setTitleTextAttributes([NSAttributedString.Key(rawValue: NSAttributedString.Key.font.rawValue): UIFont.systemFont(ofSize: 30)], for: .normal)
            
            // 폰트 색상 변경
            tbItem.setTitleTextAttributes([NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.yellow], for: .selected)
            tbItem.setTitleTextAttributes([NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.green], for: .disabled)
        }
    }
}                    
cs


기존에는 rawValue 속성에 다이렉트로 값을 할당했던것 같다. 4.2에서는 rawValue에 할당해서 Key로 넘기는 방식이다.

또한 TabBar Item State 속성에서 .disabled 가 작동하지않는다;;

왜 작동이 안되는건지 모르겠다.


아시는 분 계시면 댓글 부탁드립니다...


추가)

.disabled가 왜 안되는지 모르겠지만 .normal 속성에 같이 할당하면 지장없이 사용할 수 있을것 같다.

예시

1
2
3
4
5
6
7
8
9
10
11
if let tbC = self.window?.rootViewController as? UITabBarController {
    if let tbItems = tbC.tabBar.items {
        for tbItem in tbItems {
            // 색상과 폰트 크기 같이 변경
            tbItem.setTitleTextAttributes([NSAttributedString.Key(rawValue: NSAttributedString.Key.font.rawValue): UIFont.systemFont(ofSize: 30), NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.green], for: .normal)
            
            // 선택시 색상 변경
            tbItem.setTitleTextAttributes([NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.yellow], for: .selected)    
        }
    }
}                    
cs