web-dev-qa-db-ja.com

Swiftでセグエの準備をする

私はエラーメッセージに直面しています:

"UIStoryboardSegue does not have a member named 'identifier'"

エラーの原因となっているコードは次のとおりです

if (segue.identifier == "Load View") {
    // pass data to next view
}

Obj-Cでは、次のように使用しても問題ありません。

if ([segue.identifier isEqualToString:@"Load View"]) {
   // pass data to next view
}

私は何を間違えていますか?

59
nikolausindra

これは、UITableViewControllerサブクラステンプレートの問題によるものと思われます。セグエをアンラップする必要があるprepareForSegueメソッドのバージョンが付属しています。

現在のprepareForSegue関数を次のものに置き換えます。

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "Load View") {
        // pass data to next view
    }
}

このバージョンでは、暗黙的にパラメーターがアンラップされるため、問題はありません。

96
Cezar

Swift 4、Swift

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "MySegueId" {
        if let nextViewController = segue.destination as? NextViewController {
                nextViewController.valueOfxyz = "XYZ" //Or pass any values
                nextViewController.valueOf123 = 123
        }
    }
}
36
Zaid Pathan

問題は、!識別子をバンドル解除する

私は持っています

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        if segue!.identifier == "Details" {
            let viewController:ViewController = segue!.destinationViewController as ViewController
            let indexPath = self.tableView.indexPathForSelectedRow()
            viewController.pinCode = self.exams[indexPath.row]

        }

    }

私の理解は!真または偽の値を取得するだけです

36
Ryan Heitner

Swift 1.2

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
            if (segue.identifier == "ShowDeal") {

                if let viewController: DealLandingViewController = segue.destinationViewController as? DealLandingViewController {
                    viewController.dealEntry = deal
                }

            }
     }
10
Scott Byrns KCL

Swift 2.3、Swift3、およびSwift4の場合:

DidSelectRowAtindexPathでパフォーマンスセグエを作成する

例:

   self.performSegue(withIdentifier: "uiView", sender: self)

その後、prepareforSegue関数を作成してDestinationセグエをキャッチし、値を渡します。

例:

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

       if segue.identifier == "uiView"{

        let destView = segue.destination as! WebViewController
        let indexpath = self.newsTableView.indexPathForSelectedRow
        let indexurl = tableDatalist[(indexpath?.row)!].link
        destView.UrlRec = indexurl

        //let url =

    }
    }

Destination ViewControllerにUrlRecという名前の変数を作成する必要があります

10
Sandu

Swift 4.2およびSwift 5.でセグエの準備をします。

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "OrderVC") {
        // pass data to next view
        let viewController = segue.destination as? MyOrderDetailsVC
        viewController!.OrderData = self.MyorderArray[selectedIndex]


    }
}

特定のイベント(ボタンのクリックなど)でセグエを呼び出す方法:

performSegue(withIdentifier: "OrderVC", sender: self)
1
M Murteza

これは、この関数を使用する方法の1つです。別のクラスの変数にアクセスし、その変数に基づいて出力を変更する場合です。

   override func prepare(for segue: UIStoryboardSegue, sender: Any?)  {
        let something = segue.destination as! someViewController
       something.aVariable = anotherVariable
   }
1
alex's

異なる識別子で同じ宛先View Controllerを使用していない場合、コードは他のソリューションよりも簡潔になる可能性があります(他のいくつかの回答ではas!を回避します):

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if let myViewController = segue.destinationController as? MyViewController { 
        // Set up the VC
    }
}
0
Taylor