Closed 5minho closed 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
}
}
꿈 편집모드로 진입하면 저장한 꿈을 편집할 수 있다. 꿈의 제목, 내용을 편집할 수 있다. 맨 아래 삭제 버튼이 있어서 해당 꿈을 삭제할 수 있다. 편집 후 우측상단 Done 버튼을 누르면 편집이 적용된 꿈 DreamDetailView를 보여준다.