Tableview ControllerとdetailViewを使用して簡単なiOSアプリケーションを実行しています。私が望むのは、セグエを介してデータを渡すことです。
これは見た目です。
「Markíza」をクリックするとURLビデオ番号1が開き、「TV JOJ」をクリックするとURLビデオ番号2がプレーヤーで開きます。
私のTableViewセル:
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とまったく同じように機能しますが、新しい言語で修正されています。私はあなたの投稿から多くの情報を持っていませんが、私の説明を助けるために各TableViewControllerに名前を付けましょう。
HomeTableViewController(これは上記のスクリーンショットです)
PlayerTableViewController(これは旅行先のプレイヤー画面です)
つまり、PlayerTableViewControllerには、渡されたデータを格納する変数が必要です。クラス宣言のすぐ下に次のようなものがあります(構造体を配列ではなく単一のオブジェクトとして保存する場合:
class PlayerTableViewController: UITableViewController {
var programVar : Program?
//the rest of the class methods....
その後、新しいTableViewControllerにデータを送信する方法は2つあります。
1)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がロードされると、変数は既に設定され使用可能になります
2)didSelectRowAtIndexPathの使用
選択したセルに基づいて特定のデータを送信する必要がある場合は、didSelectRowAtIndexPathを使用できます。これを機能させるには、ストーリーボードビューでセグエに名前を付ける必要があります(これを行う方法を知る必要がある場合はお知らせください)。
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)
}
これに関する他の情報が必要な場合はお知らせください
Swift 3および4を使用
最初のViewController(値を送信)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "MainToTimer") {
let vc = segue.destination as! YourViewController
vc.verificationId = "Your Data"
}
}
2番目のviewController(値をキャッチ)
var verificationId = String()
ターゲットクラスのみで識別子でアクションを識別する必要がない場合...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? YourViewController {
vc.var_name = "Your Data"
}
}