-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
meal cell 클릭시 화면 이동 문제
21.03.02 15:48 작성 조회수 212
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
}
}
답변을 작성해보세요.
0
iOS Developer - 이정
지식공유자2021.03.02
안녕하세요
didDeselect...가 아닌
didSelectRowAtIndexPath에 코드를 넣으시면 될 것 같습니다.
감사합니다.
답변 1