Ваш подход здесь неверен:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let si = self.storyboard?instantiateViewController(withIdentifier: "ShowIssueDetail") as! ShowIssueDetail
si.idSelected = indexPath.row //Here I change the value of the variable
performSegue(withIdentifier: "ShowIssueDetail", sender: self)
}
Вы создаете другой экземпляр VC и устанавливаете значение. Этот VC не тот, который будет показан.
Вам необходимо использовать prepareForSegue
метод
var selectedRow: someTypeSameAsRow?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedRow = indexPath.row
performSegue(withIdentifier: "ShowIssueDetail", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowIssueDetail",
let vc = segue.destination as? ShowIssueDetail {
vc.idSelected = selectedRow
}
}
EDIT:
Чтобы устранить ошибку, упомянутую в комментариях, возможно, потребуется подождать, пока представление сведений будет загружено правильно. Функция awakeFromNib должна работать здесь:
// this goes in the view controller
override func awakeFromNib() {
super.awakeFromNib()
self.detailView.selected = selected
}
Итак, с этим кодом вы ждете, пока представление VC и его подпредставления не будут полностью загружены, а затем устанавливаете выбранное свойство showDetailView в то же выбранное свойство, которое находится в VC.