일단 프로필 정보를 만들면 업데이트 해줘야하는데 그걸 한번 구현해봤다.
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
}
}
확장으로 델레게이트 어디에 업데이트 되는지 설정을 해놓으면 된다.
그러면 완성 ~
까먹지 말자델리게이트
반응형
'코딩' 카테고리의 다른 글
swfit 제이슨 데이터 저장방법에 대해 알아보자 (1) | 2024.09.13 |
---|---|
swift userdefaults 데이터 저장하기 (0) | 2024.09.13 |
swift 제스처 기능 넣어보기 (0) | 2024.09.11 |
swfit 키패드 위쪽에 자동 텍스트 완성 기능 제거하기~ (0) | 2024.09.11 |
swfit 키패드 자동완성 자동수정 비활성화 하기 (0) | 2024.09.11 |