2017-05-04 1 views
1

J'ai un problème.Transmettre les données de Modal Viewcontroller à rootController avec Swift 3 (ne pas segue)

J'ai besoin d'aide. J'ai cherché une solution pendant environ 5 heures. Malheureusement sans succès.

Mon problème est que j'ai plusieurs storyboards et créé sans Segue.

J'adorerais que le titre sélectionné de Tableviewcell passe à rootViewController.

Voici mon code dans mon ModalViewTable:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 
    let indexNumber = "\(indexPath.row)" 

    let indexPath = tableView.indexPathForSelectedRow 
    let currentCell = tableView.cellForRow(at: indexPath!) as UITableViewCell! 
    let storyboard = UIStoryboard(name: "addTime", bundle: nil) 
    var viewController = storyboard.instantiateViewController(withIdentifier: "addTimeVC") as! addTimeViewController 
    viewController.test = "TESTABCDEF" 
    passedValue = ("\(indexNumber)") 
    dismiss(animated: true, completion: nil) 
} 

J'ai un bien test dans mon firstViewController. Qu'est-ce qui est mal ici? J'ai aussi essayé avec des délégués et des fermetures mais sans succès. Aidez-moi, s'il vous plaît.

+0

Vous devrez peut-être présenter le 'viewController' que vous venez de créer. BTW, voulez-vous revenir à votre précédent VC * ou * présenter un nouveau complet? –

+0

Si je le présente encore, alors c'est quand même pour les souvenirs pas bon. J'ai avec Présent (vc, animé: vrai ...) au ModalViewController et je veux revenir avec rejeter. Avec un var statique, je peux passer le titre, mais il n'est pas propre ou? –

+0

Non, l'utilisation d'un 'static var' vous mettra en difficulté dernièrement. S'il vous plaît voir ma réponse ci-dessous pour une meilleure alternative. –

Répondre

0

Essayez ceci:

let indexNumber = "\(indexPath.row)" 
let indexPath = tableView.indexPathForSelectedRow 
let currentCell = tableView.cellForRow(at: indexPath!) as UITableViewCell! 

let viewController = navigationController!.presentingViewController as! addTimeViewController 
viewController.test = "TESTABCDEF" 
passedValue = ("\(indexNumber)") 
navigationController!.dismiss(animated: true, completion: nil) 

Lorsque vous présentez un contrôleur de vue modalement selon la méthode present(_:animated), le contrôleur de vue qui a été présenté a la propriété presentingViewController définie sur le contrôleur de vue que présenté il. En d'autres termes, cette propriété contient une référence au contrôleur de vue précédent.

+0

J'ai essayé ce code. L'application est écrasée. C'est le code d'erreur: Impossible de convertir la valeur de type 'UINavigationController' (0x1104e8008) en 'timeSheet.addTimeViewController' (0x10e257d68). Ceci est le code pour le présent du contrôleur: –

+0

@UmitSevim Réponse mise à jour! S'il vous plaît essayez à nouveau quand vous avez une chance ... :) –

+0

Malheureusement, sans succès. Je reçois encore la même erreur :(. –