Ch.12 Gold: Pushing More View Controllers
# 아이템 생성 날짜 변경
- 아이템의 생성 날짜를 변경할 수 있는 버튼을 만들어서, 버튼을 누르면 날짜를 변경할 수 있는 date picker 가 나오는 뷰로 연결하는 게 과제
# 새로운 뷰 컨트롤러 추가하기
- 그냥 DetailViewController 에 버튼을 하나 추가해주고, 버튼을 누르면 CreationDateChangeViewController 로 넘어가도록 segue 를 추가해줬다.
class DetailViewController: UIViewController, UITextFieldDelegate {
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.identifier {
case "showCreationDate":
let dateChangeViewController = segue.destination as! DateChangeViewController
dateChangeViewController.item = item
default:
preconditionFailure("Unexpected segue identifier")
}
}
}
# Date Picker 커스터마이징
- viewDidLoad() 에서 setDate(_:animated:) 메서드로 Date Picker 가 나타낼 날짜를 아이템의 생성 날짜로 설정해주고, 시간은 없애고 날짜만 보이도록 모드도 셋팅해줬다. 그리고 라벨도 아이템 이름에 따라 업데이트 해주고 싶어서 여기서 처리해줬다.
- 사실 별 생각 없이 Item 의 didSet 에서 라벨을 업데이트했었는데 그렇게 했더니 아직 라벨 객체가 생성되기 전이라 터져서 고쳐줬다...
class DateChangeViewController: UIViewController {
var item: Item!
@IBOutlet weak var creationDateLabel: UILabel!
@IBOutlet weak var creationDatePicker: UIDatePicker!
@IBAction func creationDateChanged(_ sender: UIDatePicker) {
item.dateCreated = sender.date
}
override func viewDidLoad() {
creationDateLabel.text = "Creation Date for \(item.name) is"
creationDatePicker.setDate(item.dateCreated, animated: false)
creationDatePicker.datePickerMode = .date
}
}
- 고민이 됐던 점은 위에서 한 커마 작업을 사실 didSet 을 이용해서 각 객체가 생성된 순간에 해도 되지 않을까 했는데 뭔가 한 군데에서 처리하는 게 더 깔끔한가 싶어서 일단 그냥 viewDidLoad() 메서드에서 했다.
creationDateLabel: UILabel! {
didSet {
createDateLabel.text = "Creation Date for \(item.name) is"
}
}
Author And Source
이 문제에 관하여(Ch.12 Gold: Pushing More View Controllers), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sunnysideup/Gold-Pushing-More-View-Controllers저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)