나타난 오류 및 막힌점
RandomStudy 프로젝트 제작 중,
할 일을 추가하는 popUpView로 present 후, 데이터 추가한 뒤 dismiss로 돌아왔을때,
데이터를 전달하는 과정에서 어떻게 구성해야 할지 막히게 되었다.
첫번째 접근방법: viewWillAppear()
뷰가 나타날때 마다 실행되는 viewWillAppear 메서드를 이용해 갔다 온 뒤 데이터를 최신화하는 함수를 넣어두자.
그 전에 이 메서드가 작동하는지 확인하기 위해 메서드가 실행되면 viewWillAppear가 출력되도록 테스트 해봤다.
// AddViewController.Swift
override func viewWillAppear(_ animated: Bool) {
print("viewWillAppear")
}
// AddPopUpViewController.Swift
// 버튼을 누르면 dismiss하는 이벤트메서드
@objc func addButtonTapped() {
guard let text = self.textField.text else { return }
if text == "" {
errorLabel.text = "공백은 추가할 수 없습니다."
errorLabel.isHidden = false
} else {
if viewModel.isContainsElement(str: text) {
errorLabel.text = "같은 목록이 존재합니다."
errorLabel.isHidden = false
} else {
errorLabel.isHidden = true
viewModel.addData(str: text)
self.dismiss(animated: true)
}
}
}
<< 실행 결과 >>
버튼을 눌러서 dismiss를 실행해도 viewWillAppear가 프린트 되지 않았다.
이유를 찾아보니 이는 modalstyle과 연관이 있다고 한다.
![]() |
![]() |
![]() |
fullscreen | automatic(기본값) | overscreen |
보통 위와같이 modalstyle을 설정하는데, 설정하지 않으면 automatic으로 설정된다.
세가지를 비교해보았을때,
- fullscreen: 이전 뷰를 제거하고, 다음 뷰로 present한다.
- automatic, overscreen: 뷰가 present되고 이전 뷰는 뷰 계층구조에서 제거되지 않는다.
따라서 fullscreen만 viewWillAppear메서드가 작동되는이유는 다음 뷰로 이동하면서 이전뷰가 뷰 계층구조에서 제거되었기 때문에,
이전 뷰로 다시 돌아온다면 viewWillAppear메서드를 이용해 뷰가 나타날것을 알려줘야하기 때문이다.
뷰를 여기저기 이동하면서 다시 돌아올 때, 데이터를 최신화해야하는 과정이 필요하거나, 레이아웃을 변경해야한다면 viewWillAppear 자주 호출했었는데, modalstyle에 따라 사용을 유념해야겠다.
하지만 이 프로젝트에서 PopUpVC는 팝업된 작은 창을 나타내기위해선 fullscreen 방식과는 맞지 않았다.(배경이 검은색으로 아예 다른 창으로 이동하는 느낌이난다..)
두번째 접근방법으로 delegate패턴을 이용했다. https://jenikeju.tistory.com/267
'iOS' 카테고리의 다른 글
iOS 다크모드에 관하여 (0) | 2024.05.05 |
---|---|
iOS 테이블셀 원하는 색이 안나오는경우 (0) | 2024.04.25 |
Delegate 패턴 구현중에 delgate = nil 오류 (0) | 2024.04.22 |
아이폰에 넣은 앱이 SQLite의 DB를 불러오지 못한 에러 (0) | 2024.04.14 |
SQLite3에 대하여 Swift (0) | 2024.04.13 |