2017-10-27 1 views
0

私は、をコールすると、コレクションビューのセルを選択するためにdataviewcontrollerを呼び出しています。その特定のdataviewcontrollerは却下され、却下するとユーザは選択したアイテム名を持ち、それはmainViewcontrollerに表示されます。次にビューコントローラが却下されません。ここでナビゲーションコントローラを持つビューコントローラを終了し、メインビューコントローラに値を戻します。

コード:私のmainViewcontroller

:今dataviewcontroller

var SelectedName: String? = "" 

override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     currentTF.text = SelectedName 

    } 

:今私はthis.MyのViewControllerがdismisingされていないとの値も表示されない解決方法を

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

     if collectionView.cellForItem(at: indexPath) != nil { 

      selectedNamesss = allitems[indexPath.row] as String 
     } 

     calldismiss() 
     print(selectedNamesss) 

    } 

func calldismiss() { 


     if let presenter = presentingViewController as? mainViewcontroller { 
      presenter.SelectedName = selectedNamesss 
     } 
     dismiss(animated: true, completion: nil) 
     } 

。事前に

感謝〜

答えて

1

私の提案は、単に「PerformSegue」のように動作している、あなたはセグエの準備を使用して非常に簡単に値を送り返すことができ、バックメインコントローラになります「UnwindSegue」技術を使用することです。 Here is tutorial for unwind segue。または、Googleからさらに多くを見つけることができます。データが表示されていない問題については

0

、問題はこの条件である:presentingViewControllerは常にUINavigationControllerになるよう

if let presenter = presentingViewController as? mainViewcontroller { 
      presenter.SelectedName = selectedNamesss 
     } 

この条件が真ではありません。次のような変更が必要です。

if let presenter = (presentingViewController as! UINavigationController).viewControllers.first! as? mainViewcontroller { 
      presenter.SelectedName = name 
     } 

ここで私はviewControllers.firstを使用しています。 mainViewcontrollerがviewControllers配列の最初のインデックスにあったことを条件にします。 viewControllers配列をチェックし、mainViewcontrollerのインデックスを見つけてそれに応じて変更してください。

私はこの変更を加え、コードは私のために働いています。私はmainViewcontrollerで選択された名前を取得しています。

また、これはデータを逆方向に転送する正しい方法ではありません。これを達成するために、デリゲートを使用したり、セグをブロックしたり、元に戻したりすることができます。

これは動作していますが、私はgifを付けてこの動作を見せています。これはあなたに:)

+0

場合に役立ちます

let dataVC = self.storyboard?.instantiateViewController(withIdentifier: "dataviewcontroller") as! dataviewcontroller self.present(vc, animated: true, completion: nil) 

これを試してみて、参照してください。あなたのコントローラが、私は次のようにコントローラを提示してい却下されていない問題については

enter image description here

david

+0

はいいいえこの同じコードで解読しています –

+0

'let storyboard = UIStoryboard(名前:" DashBoard "、バンドル:nil) let destinationVc = storyboard.instantiateViewController(withIdentifier: "NewVC")self.navigationController?.pushViewController(destinationVc、animated:true) ' – david

関連する問題