segue를 통해 데이터 전달
테이블뷰 컨트롤러와 detailView로 간단한 iOS 어플리케이션을 하고 있습니다.제가 원하는 것은 segue를 통해 데이터를 전달하는 것입니다.
이렇게 생겼습니다.
제가 원하는 것은 "Markíza"를 클릭하면 URL 비디오 1번이 열리고 "TV JOJ"를 클릭하면 URL 비디오 2번이 플레이어에서 열립니다.
내 테이블 보기 셀:
struct Program {
let category : String
let name : String
}
var programy = [Program]()
self.programy = [Program(category: "Slovenské", name: "Markíza"),
Program(category: "Slovenské", name: "TV JOJ")]
Swift는 Obj-C와 정확히 같은 방식으로 작동하지만 새로운 언어로 재작업됩니다.당신의 게시물에 대한 많은 정보는 없지만 각 TableView 컨트롤러의 이름을 지정하여 설명을 도와드리겠습니다.
HomeTableViewController(위에 있는 스크린샷)
PlayerTableViewController(이동하려는 플레이어 화면)
즉, PlayerTableViewController에는 전달된 데이터를 저장할 변수가 있어야 합니다.클래스 선언 바로 아래에는 다음과 같은 것이 있습니다(구조를 배열이 아닌 단일 개체로 저장하려는 경우:
class PlayerTableViewController: UITableViewController {
var programVar : Program?
//the rest of the class methods....
그런 다음 두 가지 방법으로 데이터를 새 TableView Controller로 전송할 수 있습니다.
PrepareForSegue 사용
HomeTableViewController 하단에서 prepareForSegue 메서드를 사용하여 데이터를 전달합니다.다음은 사용할 코드의 예입니다.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
// Create a variable that you want to send
var newProgramVar = Program(category: "Some", name: "Text")
// Create a new variable to store the instance of PlayerTableViewController
let destinationVC = segue.destinationViewController as PlayerTableViewController
destinationVC.programVar = newProgramVar
}
}
PlayerTableViewController가 로드되면 변수가 이미 설정되어 사용 가능합니다.
didSelectRowAt 사용하기인덱스 경로
선택한 셀을 기준으로 특정 데이터를 전송해야 하는 경우 didSelectRowAt를 사용할 수 있습니다.인덱스 경로.이 작업을 수행하려면 스토리보드 보기에서 segue에 이름을 지정해야 합니다(이 작업도 수행하는 방법을 알아야 할 경우 알려주십시오).
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Create a variable that you want to send based on the destination view controller
// You can get a reference to the data by using indexPath shown below
let selectedProgram = programy[indexPath.row]
// Create an instance of PlayerTableViewController and pass the variable
let destinationVC = PlayerTableViewController()
destinationVC.programVar = selectedProgram
// Let's assume that the segue name is called playerSegue
// This will perform the segue and pre-load the variable for you to use
destinationVC.performSegueWithIdentifier("playerSegue", sender: self)
}
이것에 대한 다른 정보가 필요하면 알려주세요.
스위프트 3 & 4 포함
첫 번째 뷰 컨트롤러(값 전송)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "MainToTimer") {
let vc = segue.destination as! YourViewController
vc.verificationId = "Your Data"
}
}
두 번째 뷰에서 컨트롤러(Catch The Value)
var verificationId = String()
작업을 식별자로 식별할 필요가 없고 대상 클래스로만 식별할 수 있는 경우...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? YourViewController {
vc.var_name = "Your Data"
}
}
언급URL : https://stackoverflow.com/questions/26207846/pass-data-through-segue
'programing' 카테고리의 다른 글
Gitrebase 병합 충돌 (0) | 2023.08.28 |
---|---|
이름 속성에 대괄호가 있는 입력에 대한 jQuery 선택기 (0) | 2023.08.28 |
하위 쿼리에 임의의 상한이 지정된 경우 MariaDB가 다르게 동작하는 이유는 무엇입니까? (0) | 2023.08.28 |
mysql에 가입하지 않고 모든 연산자를 사용하여 하위 쿼리 선택 (0) | 2023.08.28 |
스케일 UIButton 애니메이션 - Swift (0) | 2023.08.28 |