У меня есть таблица с некоторыми кнопками. Я хочу, чтобы при нажатии на один из них перейти к другому контроллеру и отправить некоторые значения с помощью перехода.
Я пробовал это:
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
}
}
Но значения всегда отправляются до того, как они установлены. Как решить эту проблему и представить результат после установки значений?
UPDATE:
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"])