카테고리 없음
swift 프로토콜로 데이터 업데이트 하기 ~
kingarthur
2024. 9. 11. 18:37
일단 프로필 정보를 만들면 업데이트 해줘야하는데 그걸 한번 구현해봤다.
protocol EditProfileDelegate: AnyObject {
func didUpdateProfile(image: UIImage?, name: String, goal: String, memo: String)
}
먼저 수정하는 뷰컨에 델리게이트를 선언해준다.
weak var delegate: EditProfileDelegate?
@objc func doneButtonTapped(_ sender: UIButton) {
// Assuming these outlets exist and are correctly connected
let updatedProfileImage = editProfileView.profileImageView.image
let updatedName = editProfileView.nameTextField.text ?? ""
let updatedGoal = editProfileView.goalTextField.text ?? ""
let updatedMemo = editProfileView.memoTextView.text ?? ""
// Notify delegate of updates
delegate?.didUpdateProfile(image: updatedProfileImage, name: updatedName, goal: updatedGoal, memo: updatedMemo)
// Dismiss the view controller
dismiss(animated: true, completion: nil)
}
완료 버튼이 누르면 프로토콜로 선정해놓은 것을 업데이트 정보를 보내준다
@objc private func EditProfileButtonTapped() {
let editProfileVC = EditProfileViewController()
editProfileVC.delegate = self // delegate 설정
let navigationController = UINavigationController(rootViewController: editProfileVC)
navigationController.modalPresentationStyle = .fullScreen
present(navigationController, animated: true, completion: nil)
}
나는 여기서 델리게이트 설정을안해서... 업데이트 안되는 오류가 있었느데 델리게이트 빼먹지 말자
프로필 뷰 컨에서 수정하는 프로필 뷰컨으로 넘어갈때 델리게이트 셀프로 넣어주면된다.
extension ProfileViewController: EditProfileDelegate {
func didUpdateProfile(image: UIImage?, name: String, goal: String, memo: String) {
// Update profile image
profileView.profileImageView.image = image
// Update name in navigation bar
self.navigationItem.title = name
// Update goal label
profileView.goalLable.text = goal
// Update memo text view
profileView.memoLabel.text = memo
}
}
확장으로 델레게이트 어디에 업데이트 되는지 설정을 해놓으면 된다.
그러면 완성 ~
까먹지 말자델리게이트