设置值后,通过segue发送值

时间:2018-05-06 16:34:47

标签: ios swift segue

我有一些带有一些按钮的tableview。我希望当我点击其中一个导航到另一个控制器并使用segue发送一些值时。

我试过了:

cell.onSummaryTapped = {
    self.servname = cell.service.text!
    self.region = String(self.regions[indexPath.row])
    self.contPer2 = String(self.contper[indexPath.row])
    self.shift = String(self.shifttype[indexPath.row])
    self.date = cell.date.text!
    self.nationality = String(self.nationalities[indexPath.row])
    self.price2 = cell.totalprice.text!

    self.summary(servname: self.servname, region: self.region, contper: self.contPer2, shift: self.shift, date: self.date, nationality: self.nationality)
}

func summary(servname: String, region: String, contper: String, shift: String, date: String, nationality: String){
    DispatchQueue.main.async {
        self.performSegue(withIdentifier: "summary", sender: self)
    }
}


     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "summary"{
        let sum = segue.destination as! ViewSummaryController
        sum.servname = self.servname
        print(servname)
        sum.region = self.region
        sum.contPer = self.contPer2
        sum.shift = self.shift
        sum.date = self.date
        sum.nationality = self.nationality
        sum.price = self.price2

    }
}

但是值总是在设置之前发送。如何解决这个问题并在设置值后显示segue?

更新

   cell.onSummaryTapped = {

        let selectedData = ["servname":cell.service.text!,"region":String(self.regions[indexPath.row]),"contper":String(self.contper[indexPath.row]),"shift":String(self.shifttype[indexPath.row]),"date":cell.date.text!,"nationality":String(self.nationalities[indexPath.row]), "price":cell.totalprice.text! ] as [String : Any]

        self.performSegue(withIdentifier: "summary", sender: selectedData)
    }

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

    // Here check your targeted segue and get parameters from sender
    if let identifier = segue.identifier , identifier == "summary"   {

        let nextScene = segue.destination as! ViewSummaryController
         nextScene.selectedData = sender as? [String:Any]  // sender paramters

    }
 }

和另一个控制器:

    var selectedData : [String:Any]?
    print("parameters are: ")
    print(selectedData)

并且我仍然没有

 parameters are: 
 nil
 Optional(["region": "1", "servname": "Nadafa", "shift": "day", "date": "2018-05-06 ", "contper": "0", "price": "SAR 80", "nationality": "4"])
here: 
Optional({
contper = 0;
date = "2018-05-06 ";
nationality = 4;
price = "SAR 80";
region = 1;
servname = Nadafa;
shift = day;
 })
here2: 
Optional(["region": "1", "servname": "Nadafa", "shift": "day", "date": "2018-05-06 ", "contper": "0", "price": "SAR 80", "nationality": "4"])
2018-05-06 21:37:25.692603+0300 SRACO[3317:1313360] <UIView: 0x102ceb3c0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x108210fa0>>'s window is not equal to <SRACO.ViewSummaryController: 0x103880800>'s view's window!
Optional(["region": "1", "servname": "Nadafa", "shift": "day", "date": "2018-05-06 ", "contper": "0", "price": "SAR 80", "nationality": "4"])

1 个答案:

答案 0 :(得分:0)

您应该从发件人

获取参数
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

         // Here check your targeted segue and get parameters from sender
        if let identifier = segue.identifier , identifier == "summary"   {

            let nextScene = segue.destination as! UIViewController
              // nextScene.paramters = sender as? [String:Any]  // sender paramters

        }
    }

 // Here you perform segue with paramters

func summary(servname: String, region: String, contper: String, shift: String, date: String, nationality: String){

        let paramters =["servname":servname,"region":region,"contper":contper,"shift":shift,"date":date,"nationality":nationality]

        self.performSegue(withIdentifier: "summary", sender: paramters)
    }
  

在目标视图控制器中获取参数

    class  ViewController: UIViewController{
         var paramters : [String:Any]?

   override func viewDidLoad() {
        super.viewDidLoad()

        let servname = paramters[servname]
        let region = paramters[region]
        let contper = paramters[contper]
        let shift = paramters[shift]
        let date = paramters[date]
        let nationality = paramters[nationality]

        }

    }