어흥
[Swift] Segue - 데이터 전달 본문
728x90
반응형
앞선 글: imnotabear.tistory.com/276
앞선 글에 이은 데이터 전달 글입니다
[데이터를 넘겨주는 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