- 개발 일자 : 2022. 3. 7
최근 기능 정의서를 좀 더 디테일하게 작성하다 보니 다 되었다고 생각됐던 알람 레이블 설정 화면에서 동작하지 않는 기능이 있었다.
(기능 정의의 중요성을 깨닫는 순간,,,)
레이블에 텍스트를 입력하지 않고 넘기면 아무 텍스트도 넘어가지 않는 것이었다.
기존에 텍스트 필드의 text 가 nil 일 때 처리를 해두어서 그거면 되는건줄 알았다.
- 코드가 좀 마음에 안들긴 하는데 우선은 더 좋은 방법이 떠오르지 않아서…
- 전에는 viewWillAppear 함수에 처리해야하는 코드를 작성해두었었는데 키보드에서 완료 버튼을 누를 때도 동일한 코드가 동작해야했기 때문에 따로 함수로 분리하였다.
private func saveAlarmLabel() {
var labelText = labelTextField.text ?? "알람"
labelText = labelText.isEmpty ? "알람" : labelText
delegate?.alarmLabelTyped(as: labelText)
}
- 그리고 진짜 어이없게.. 이전에 키보드 완료 눌렀을 때 화면을 dismiss 한 것이 이상하게 동작해서(알람 목록화면으로 돌아가버림) 이번에도 일단 넘겨야지 하고 생각하고 있었는데 갑자기 이 옵션 화면이 네비게이션이었다는 걸 깨달았다..(멍청) 그래서 바로 해결!
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
saveAlarmLabel()
labelTextField.resignFirstResponder()
navigationController?.popViewController(animated: true)
return true
}
알람 목록 정렬 버그 수정
Alarm 2. 알람 섹션 분리 및 정렬 를 정리하다가 버그를 발견했는데 하나는 이미 추가된 알람을 수정했을 때 정렬이 되지 않는 것이었고, 다른 하나는 시간 비교가 Date 타입으로 되고 있다는걸 깨달았다. 날짜가 포함되면 시간이 늦어도 빠른 것으로 될 테니까..
- 알람을 수정했을 때도 정렬을 해주었는데 또 안되는 것이다,, 생각해보니 전에 그냥 값만 바뀐다고 생각해서 알람을 수정하고 reloadData() 를 한 것이 아니라 해당 행만 reload 를 했던 거였다. 그래서 정렬 코드 넣어주고, reloadData() 로 변경하였다.
- 그 다음 문제는 시간 비교를 어떻게 할까 고민하다가 시간 값만 가져와서 분으로 환산해서 비교하기로 했다. 더 나은 방법이 있을 수 도 있지만 date 값을 분으로 환산한 다음, 비교 함수를 만들어주었다.
extension Date {
var minutes: Int {
let calendar = Calendar.current
let hour = calendar.component(.hour, from: self)
let minute = calendar.component(.minute, from: self)
return hour * 60 + minute
}
func timeFaster(than date: Date) -> Bool {
return self.minutes < date.minutes
}
}
► 이전글 :
► 다음글 :
'# iOS | Swift > --- Project' 카테고리의 다른 글
[강의] 내 근처 편의점 찾기 앱 (0) | 2022.08.09 |
---|---|
iOS 지도 API 사용하기 (feat. Kakao Map) (0) | 2022.07.05 |
[Alarm] 2. 알람 섹션 분리 및 정렬 (0) | 2022.03.02 |
[Alarm] #+4. 알람 끄기 화면 구현 (0) | 2022.02.25 |
[Alarm] #+3. 알람 레이블 화면 추가 (0) | 2022.02.25 |