5minho / DreamRecorder

mino & bran BoostCamp Project
6 stars 0 forks source link

꿈 편집 #7

Closed 5minho closed 6 years ago

5minho commented 6 years ago

꿈 편집모드로 진입하면 저장한 꿈을 편집할 수 있다. 꿈의 제목, 내용을 편집할 수 있다. 맨 아래 삭제 버튼이 있어서 해당 꿈을 삭제할 수 있다. 편집 후 우측상단 Done 버튼을 누르면 편집이 적용된 꿈 DreamDetailView를 보여준다.

5minho commented 6 years ago

편집상태에서 cell을 touch하면 DetailDreamViewController가 edit mode 이어야 한다.

navigationController?.pushViewController(detailDreamViewController, animated: true)

            if self.tableView.isEditing {
                detailDreamViewController.mode = .edit
            }

이러한 코드를 작성할 수 있는데 이러한 코드를 작성하고 app이 죽지 않기 위해서는, detailDreamViewController 에서 mode를 변경했을때 trigger되는 메서드에서 detailDreamViewController의 view 에 접근하는 일이 없어야 한다. 왜냐면

if self.tableView.isEditing {
        detailDreamViewController.mode = .edit
}

이 코드가 실행되는 시점이 detailDreamViewController의 viewDidLoad() or awakeFromNib()이 호출되는 시점 보다 빠르기 때문이다.

이를 해결하기 위해 옵셔널을 활용 할 수 있다. 아직 인스턴스화 되지 않은 controller의 view들에 접근하는 코드에 ?을 추가해주면 view에 접근하는 코드가 그냥 넘어가 버려서 app이 죽지 않는다.

 private func adjustViewMode() {

        switch self.mode {

        case .read:

            self.deleteButton?.isHidden = true
            self.navigationItem.rightBarButtonItem = editButton
            self.titleField?.layer.borderWidth = 0
            self.titleField?.isUserInteractionEnabled = false
            self.contentTextView?.isUserInteractionEnabled = false
            self.contentTextView?.layer.borderWidth = 0

        case .edit:

            self.deleteButton?.isHidden = false
            self.navigationItem.rightBarButtonItem = doneButton
            self.titleField?.layer.borderWidth = 1
            self.titleField?.isUserInteractionEnabled = true
            self.contentTextView?.isUserInteractionEnabled = true
            self.contentTextView?.layer.borderWidth = 1

        }

    }