본문 바로가기
iOS

iOS14에서 UIDatePicker 오류를 해결하자. 'NSInvalidArgumentException', reason: '-[_UIDatePickerIOSCompactView setHighlightsToday:]

by 책 읽는 개발자_테드 2021. 2. 22.
반응형

iOS에서는 날짜와 시간을 입력하기 하기 위해 UIDatePicker를 사용합니다. UIDatePicker를 적용하면 iOS 13까지는 기본적으로 다음과 같이 wheel 모양의 선택 UI를 볼 수 있었습니다.

 

아울렛변수를 통해 설정을 하면 다음과 같이 전체 날짜의 색상과 오늘 날짜의 색상을 서로 다르게 조절도 가능합니다.

 

 

@IBOutlet weak var datePicker: UIDatePicker! 

datePicker.setValue(UIColor.white, forKeyPath: "textColor")
datePicker.setValue(true, forKeyPath: "highlightsToday")

 

 

문제: xcode12 이후 버전에서 iOS14 이후 버전을 빌드하고, UIDatePicker가 있는 화면으로 이동하면 다음과 같은 오류를 뿜으며 앱이 종료되는 오류가 발생했습니다.

 

NSInvalidArgumentException', reason: '-[_UIDatePickerIOSCompactView setHighlightsToday:]



원인: 이러한 문제가 발생한건 iOS14 이후 버전의 UIDatePicker 기본 모양이 다음과 같이 변경되었기 때문입니다.

 

위 화면처럼 날짜가 쓰여진 버튼을 클릭하면, 캘린더가 나오는 모양으로 UIDatePicker의 기본 UI가 변경되었습니다.

 

문제를 해결하기 위한 방법은 2가지 입니다.

 

1. 버튼 형태의 UIDatePicker를 유지하고 싶다면, 다음의 설정 코드를 지우면 됩니다.

//datePicker 설정을 지우자
datePicker.setValue(UIColor.white, forKeyPath: "textColor") 
datePicker.setValue(true, forKeyPath: "highlightsToday")

2. 기존의 wheel 형태의 UIDatePicker로 돌아가고 싶다면,  iOS 14 버전에서도 wheel 형태의 UIDatePicker를 사용하도록 강제하면 됩니다.

@IBOutlet weak var datePicker: UIDatePicker!   

	if #available(iOS 14.0, *) {
		datePicker.preferredDatePickerStyle = .wheels
		datePicker.setValue(UIColor.white, forKeyPath: "textColor")
		datePicker.setValue(true, forKeyPath: "highlightsToday")
	}



출처

https://onmyway133.github.io/blog/How-to-set-date-color-in-UIDatePicker-in-iOS-13/

 

반응형

댓글