강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của cjg49704021
cjg49704021

câu hỏi đã được viết

Hướng dẫn hoàn hảo để phát triển ứng dụng iOS12

meal cell 클릭시 화면 이동 문제

Viết

·

367

0

meal cell 클릭 -> 아무 변화 없음 

다시 클릭 -> 이전에 클릭했던 meal cell의 정보가 Detail VC에 출력됩니다. 

예를 들면 스파게티를 클릭하면 아무 변화가 없습니다. 그러나 그 다음 케밥이나 파스타를 클릭하면 스파게티 화면이 출력됩니다.

아래는 코드 전문입니다.

//

//  ViewController.swift

//  foodMaker2

//

//  Created by Choi Joon on 2021/02/26.

//

import UIKit

class ViewController: UIViewController {

    

    @IBOutlet weak var myTF: UITableView!

    var mealLists = [MealModel]()

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        //xib파일을 만들었으면 이렇게 따로 등록을 해줘야함.

        //nilName에는 파일명을 적고 forCellReuseIdentifier에는 identifier를 적는다.

        myTF.register(UINib(nibName: "MealCell", bundle: nil), forCellReuseIdentifier: "mealCell")

        

        //더미데이터를 생성 : 해당 데이터들을 MealModel에 넣음

        let dummy1 = MealModel.init(name: "스파게티", photo: UIImage(named: "meal1"), rating: 3)

        //리스트에 추가

        mealLists.append(dummy1)

        let dummy2 = MealModel.init(name: "케밥", photo: UIImage(named: "meal2"), rating: 4)

        mealLists.append(dummy2)

        let dummy3 = MealModel.init(name: "파스타", photo: UIImage(named: "meal3"), rating: 5)

        mealLists.append(dummy3)

    }

    //segue가 작동될때 호출되는 함수

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        //segue의 종류를 identifier로 구분 

        if segue.identifier == "presentDetail"{

            

        }else if segue.identifier == "showDetail"{

            //segue의 도착 VC 설정

            let detailVC = segue.destination as! MealDetailViewController

            //클릭한 셀의 인덱스 정보를 가져옴

            let selectedIndexPath = sender as! IndexPath

            //해당 인덱스의 mealModel을 MealDetailViewController의 mealModel에 전달

            detailVC.mealModel = mealLists[selectedIndexPath.row]

            

            

            

        }

    }

    

}

extension ViewController : UITableViewDelegate{

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {

        performSegue(withIdentifier: "showDetail", sender: indexPath)

    }

    

    //cell의 높이 지정

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        return 100

    }

}

extension ViewController : UITableViewDataSource{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return mealLists.count

    }

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        // as! MealCell : MealCell.swift 코드에 접근

        // withIdentifier : xib 파일에 존재하는 cell에 접근

        let mealCell = tableView.dequeueReusableCell(withIdentifier: "mealCell", for : indexPath) as! MealCell

        // MealModel의 데이터들을 mealCell로 전달( indexPath로 접근 )

        mealCell.name.text  = mealLists[indexPath.row].name

        mealCell.mealImageView.image = mealLists[indexPath.row].photo

        mealCell.ratingView.rating = mealLists[indexPath.row].rating

        return mealCell

    }

    

    

}

iosswift

Câu trả lời 1

0

enilv0529님의 프로필 이미지
enilv0529
Người chia sẻ kiến thức

안녕하세요

didDeselect...가 아닌

 didSelectRowAtIndexPath에 코드를 넣으시면 될 것 같습니다.

감사합니다.

Hình ảnh hồ sơ của cjg49704021
cjg49704021

câu hỏi đã được viết

Đặt câu hỏi