# iOS | Swift/--- Project

[Alarm] #+5. 알람 레이블 화면 기능 완성 및 알람 목록 정렬 버그 수정

jiniz.ll 2022. 3. 7. 23:44
  • 개발 일자 : 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
    }
}

 


► 이전글 : 

► 다음글 :