오늘은 그동안 만들던 원피스 현상금 앱의 마무리를 지었다.
그 중에서도 디테일 뷰를 구현하였는데, 테이블에서 셀을 선택하면 새로 생성되는 뷰를 디테일뷰라고 칭하기로 하였다
이 때 필요한 기능의 이름이 세그웨이다.
스토리보드에서 뷰를 하나 끌고온 다음에 이렇게 control을 누른상태로 드래그하여 와이어를 이어주면 된다.
//UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
print("-->\(indexPath.row)")
performSegue(withIdentifier: "showDetail", sender: nil)
}
그리고 기존의 테이블뷰 코드에 performSegue함수를 추가해준다.
이때 세그웨이의 이름은 showDetail로 정해주었다.
그러나 세그웨이를 이어줬어도 모달창만 업로드될 뿐 우리가 원하는 이미지와 이름, 현상금이 포함된 내용은 뜨지 않는다.
디테일뷰가 렌더되기 전에 테이블뷰에서 데이터를 넘겨줄 준비를 하고 있어야한다.
let bountyList = [33000000, 50, 4400000, 30000000, 16000000, 8000000, 7700000, 12000000]
~~~
//세그웨이 실행준비 함수
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//DetailVieweController에 데이터를 넘겨주겠다
if segue.identifier == "showDetail" {
let vc = segue.destination as? DetailViewController
if let index = sender as? Int{
vc?.name = nameList[index]
vc?.bounty = bountyList[index]
}
}
}
~~~
override func viewDidLoad() {
super.viewDidLoad()
세그웨이 실행 준비함수인 prepare를 작성해주도록 한다.
디테일뷰에서 필요로하는 name과 bounty를 넘겨준다
class DetailViewController: UIViewController {
@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var nameLable: UILabel!
@IBOutlet weak var bountyLable: UILabel!
var name: String?
var bounty: Int?
override func viewDidLoad() {
super.viewDidLoad()
updateUI()
}
func updateUI() {
if let name = self.name, let bounty = self.bounty {
let img = UIImage(named: "\(name).jpg")
imgView.image = img
nameLable.text = name
bountyLable.text = "\(bounty)"
}
}
@IBAction func close(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
}
그리고 디테일뷰는 다음과 같이 작성해주면 완료
올인원 패키지 : iOS 앱 개발👉https://bit.ly/2FjWizq
'패스트캠퍼스) ios 개발 챌린지' 카테고리의 다른 글
패스트캠퍼스 iOS 앱 개발 올인원 패키지 Online. 챌린지 참여 후기 (0) | 2020.12.07 |
---|---|
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 28회차 미션 (0) | 2020.11.29 |
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 27회차 미션 (0) | 2020.11.28 |
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 26회차 미션 (0) | 2020.11.27 |
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 25회차 미션 (0) | 2020.11.26 |