데이터 전송하기

Judy·2021년 6월 10일
0

장소 편집하기

저장된 장소의 내용을 편집할 수 있게 Edit 버튼을 추가했다.

이미 구현이 돼있는 Add Place 뷰로 이동하게 segue를 연결

  1. 이동하면 Info 뷰의 내용을 Add Place로 전해 수정할 수 있도록 해야한다.

var editData : PlaceData?

Info 뷰에 장소 정보를 저장하는 PlaceData 변수를 만들고 테이블 뷰에서 받은 장소 정보를 대입한다.


  1. Add Place 뷰에 segue를 보낼 때 Add Place 뷰에서 장소 정보를 세팅하는 SetInfo 함수에 editData를 넣어서 보낸다.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
	if(segue.identifier == "editPlace"){
            let addPlaceViewController = segue.destination as! AddPlaceTableViewController
            addPlaceViewController.setInfo(data: editData!, image: receiveImage!)
            addPlaceViewController.delegate = self
        }
    }

그럼 Info 뷰에서 edit 버튼을 누르면 Add Place 화면에 장소 정보가 보인다!
직접 TextField나 lable 조작은 안되고 문자열에 옮긴 후 설정한다.


[ Protocol ]

: 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진

  • 프로토콜은 정의하고 제시할 뿐 실제 구현하진 않음
  • 프로토콜을 채택해서 프로토콜의 요구사항을 실제로 구현

  1. 수정을 완료하면 다시 Info 뷰로 돌아오는데 수정된 내용이 Info 뷰에도 적용시키기 위해 AddPlaceTableVeiwController에 프로토콜을 생성한다.
protocol EditDelegate {
    func didEditPlace(_ controller: AddPlaceTableViewController, data: PlaceData, image: UIImage)
}



  1. Info에서 프로토콜을 채택하고 구현한다.
class PlaceInfoTableViewController: UITableViewController, EditDelegate {



  1. Add Place에서 수정된 장소정보를 받아 Info 뷰에 내용이 세팅되게 했다.
func didEditPlace(_ controller: AddPlaceTableViewController, data: PlaceData, image: UIImage) {
         getInfo(data, image: image)
         setData()
    }



  1. Add Place로 segue를 보내면서 델리게이트를 위임해주고
if(segue.identifier == "editPlace"){
            let addPlaceViewController = segue.destination as! AddPlaceTableViewController
            addPlaceViewController.setInfo(data: editData!, image: receiveImage!)
            addPlaceViewController.delegate = self



  1. Add Place에선 수정된 장소 정보를 넘겨준다.
 var delegate : EditDelegate?
 
if delegate != nil{
            editData?.name = tfPlaceName.text
            editData?.position = tfPlacePosition.text
            editData?.category = tfCategory.text
            editData?.visit = swVisit.isOn
            editData?.date = pkDate.date
            editData?.coment = txvComent.text
            editData?.rate = lblRate.text

            delegate?.didEditPlace(self, data: editData!, image: selectedImage)
        }
        _ = navigationController?.popViewController(animated: true)



복잡해보이지만 segue, protocol, delegate를 이용해서 데이터 이동 성공!


# 소감 #

정보가 안뜨기도 하고 이런 저런 세팅을 맞춰주느라 멀리 돌아온거 같다,,


다음 목표

태그 입력하기, 카테고리 수정 가능하게 하기, 방문여부에 따라 별점

profile
iOS Developer

0개의 댓글