1. ホーム
  2. ios

セグを通過するデータ

2023-09-20 13:57:18

質問

テーブルビューコントローラとdetailViewで簡単なiOSアプリを作っています。セグエを通してデータを渡したいだけです。

はこのような感じです。

私が望むのは、"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と全く同じように動作しますが、新しい言語で作り直されます。あなたの投稿から多くの情報を持っていませんが、私の説明を助けるために、それぞれのTableViewControllerに名前を付けてみましょう。

ホームTableViewController (これは上のスクリーンショットです)

PlayerTableViewController (移動したいプレイヤー画面です。)

ということで、PlayerTableViewControllerには渡されたデータを格納する変数を用意する必要があります。クラス宣言の直下に以下のように記述します(構造体を配列ではなく、1つのオブジェクトとして格納する場合)。

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

他に必要な情報があれば教えてください。