음 아마 비둘기보단 똑똑할꺼야
준돌 Jundol / 2019.01.22 14:26 / iOS

꼼꼼한 재은씨의 스위프트 실전편 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



준돌 Jundol / 2019.01.14 11:32 / iOS

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

Chapter01 기본 기능 다루기: 메모장 앱 제작

이미지 피커 컨트롤러에서 이미지가 선택되었을 때 호출되는 델리게이트 메소드에서

info[UIImagePickerControllerEditedImage] 이부분이 에러발생한다.

Swift4.2에서는 책에 쓰인 4.0과는 약간의 수정이 있기 때문에 고쳐서 사용해야한다.


기존 예제 소스코드

1
2
3
4
5
6
7
8
  // 이미지 선택을 완료했을 때 호출되는 메소드
  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    // 선택된 이미지를 미리보기에 표시한다.
    self.preview.image = info[UIImagePickerControllerEditedImage] as? UIImage
    
    // 이미지 피커 컨트롤러를 닫는다.
    picker.dismiss(animated: false)
  }
cs


변경 소스코드

1
2
3
4
5
6
    private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let editedImage = info[.editedImage] as? UIImage{
            self.preview.image = editedImage
            picker.dismiss(animated: false)
        }
    }
cs


[error] if let 구문을 사용해서 info[.editedImage] 에서 editedImage 상수에 할당해서 이미지를 불러온다.

[warning] imagePickerController를 private 접근제한자로 감싸줘야한다.

© 2015 Jundol in 음 아마 비둘기보단 똑똑할꺼야
Designed by DH / Powered by Tistory
143 / 112 / 149,056