web-dev-qa-db-ja.com

セグエを介してデータを渡す

Tableview ControllerとdetailViewを使用して簡単なiOSアプリケーションを実行しています。私が望むのは、セグエを介してデータを渡すことです。

this is how it looks like

これは見た目です。

「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")]
63
patrikbelis

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)
}

これに関する他の情報が必要な場合はお知らせください

127
Sasha Reid

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()
37
Imtee

ターゲットクラスのみで識別子でアクションを識別する必要がない場合...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? YourViewController {
        vc.var_name = "Your Data"
    }
}
2
Andrea Leganza