TableView Cell 선택시
데이터 보유 객체 :
TableView 담당 뷰 컨트롤러
목적지 객체 :
상세 화면 담당 뷰 컨트롤러
핵심 : 선택된 Cell 의 indexPath.row 에 해당하는 데이터 전달 요망
prepare(for:sender:) 메서드 활용
준비사항 :
1.
출발지의 데이터 배열.
2.
목적지에 데이터 받을 프로퍼티 선언.
final class DestinationViewController: UIViewController {
//할당받을 프로퍼티
var artwork: Artwork?
(... 후략)
}
Swift
복사
prepare(for:sender:) 메서드를 재정의하여 사용하면 전환될 화면인 다음 뷰컨트롤러에 데이터를 넘겨 줄 수 있습니다.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let indexPath = tableView.indexPath(for: sender as! UITableViewCell) else {
os_log(.fault, log: .ui, OSLogMessage.indexPathIsNil)
return
}
//segue의 식별자를 검사!!
if segue.identifier == Identifier.Segue.(사용자 정의 세그 identifier) {
//segue 의 destination 을 목적지 뷰컨트롤러 클래스로 다운캐스팅
let followingViewController = segue.destination as? DestinationViewController
// indexPath.row 에 해당하는 데이터 할당.
followingViewController?.artwork = artworks[indexPath.row]
}
}
Swift
복사
핵심.
1.
다운 캐스팅 : sender as! UITableViewCell
2.
sender 로부터 선택된 Cell 의 indexPath.row 추출
3.
데이터 배열의 indexPath.row 번째 인덱스에 있는 요소를 목적지의 프로퍼티에 할당.