장소 편집하기

저장된 장소의 내용을 편집할 수 있게 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개의 댓글

Powered by GraphCDN, the GraphQL CDN