어흥

[Swift] Segue - 데이터 전달 본문

iOS

[Swift] Segue - 데이터 전달

라이언납시오 2020. 9. 10. 12:06
728x90
반응형

앞선 글: imnotabear.tistory.com/276

 

[iOS] Custom TableView, Segue

※ 추가적으로 공부가 필요.. [Custom TableView] 1. 임의로 이름, 현상수배금을 ViewController에서 생성하고, 사진을 Assets.xcassets에 넣는다 추가로, ListCell 클래스를 생성하여 객체를 쉽게 저장할 수 있도.

imnotabear.tistory.com

앞선 글에 이은 데이터 전달 글입니다

 

[데이터를 넘겨주는 ViewController]

    //UITableViewDelegate: 클릭했을 때 반응
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("--> \(indexPath.row)")
        //정보 전달 : indexPath.row
        performSegue(withIdentifier: "showDetail", sender: indexPath.row)
        
    }

 

앞선 코드와 sender: indexPath.row 코드의 변화가 있습니다. Segue는 데이터를 넘겨주기전에 prepare() 함수를 수행합니다.

prepare() 함수는 다음과 같으며(Override 필요), sender로 넘긴 Row 번호에 있는 데이터를 name과 bounty 변수에 저장하여 DetailViewController로 넘깁니다. 

    //segue가 진행되기전에 준비하는 함수
    //DetailViewContorller에게 데이터 넘긴다
    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "showDetail" {
            let vc = segue.destination as? DetailViewController
            if let index = sender as? Int{
                vc?.name = nameList[index]
                vc?.bounty = bountyList[index]
            }
        }
    }

 

DetailViewController에서는 변수와 IBOutlet을 미리 설정해두고, updateUI() 함수를 새로 만들고 ViewDidLoad() 함수에서 호출하도록 코드를 작성합니다. 이후, updateUI() 함수에서는 Segue를 통해 받은 데이터를 설정합니다.

    @IBOutlet weak var imgView: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var bountyLabel: UILabel!
    
    var name: String?
    var bounty: Int?
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        updateUI()
    }
    
    func updateUI(){
        
        if let name = self.name, let bounty = self.bounty{
            let img = UIImage(named: "\(name).jpg")
        
        
            imgView.image = img
            nameLabel.text = name
            bountyLabel.text = "\(bounty)"
        }
    }

 

[결과화면]

728x90
반응형

'iOS' 카테고리의 다른 글

[Swift] Animation  (0) 2020.09.15
[Swift] CollectionView  (0) 2020.09.15
[Swift] Custom TableView, Segue  (0) 2020.09.08
[Swift] TableView  (0) 2020.09.08
[Swift] 겪은 에러  (0) 2020.09.07
Comments