簡體   English   中英

在Swift准備Segue

[英]Prepare for Segue in 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
}

我究竟做錯了什么?

這似乎是由於UITableViewController子類模板中的問題。 它附帶了一個版本的prepareForSegue方法,需要你打開segue。

用以下內容替換當前的prepareForSegue函數:

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

這個版本隱含地打開參數,所以你應該沒事。

我認為問題是你必須使用! 解開標識符

我有

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]

        }

    }

我的理解是沒有! 你只是得到一個真或假的價值

Swift 4,Swift 3

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

對於Swift 2.3,swift3和swift4:

在didSelectRowAtindexPath創建一個執行Segue

對於Ex:

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

之后創建一個prepareforSegue函數來捕獲Destination segue並傳遞值:

例如:

  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的變量

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
                }

            }
     }

准備Swift 4.2和Swift 5中的Segue。

    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]


    }
}

如何在特定事件上調用segue(如按鈕單擊等):

performSegue(withIdentifier: "OrderVC", sender: self)

這是您可以使用此功能的方法之一,當您想要訪問另一個類的變量並根據該變量更改輸出時。

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

如果您沒有使用具有不同標識符的相同目標視圖控制器,則代碼可以比其他解決方案更簡潔(並避免在其他一些答案中使用as! ):

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

更改帶有id的部分右側面板中的segue標識符。 用於匹配條件中使用的字符串的圖標。

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        if(segue!.identifier){
            var name = segue!.identifier;
            if (name.compare("Load View") == 0){

            }
        }
    }

您無法將標識符與==進行比較,您必須使用compare()方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM