2017-03-15 18 views
0

私はコレクションビューを持っています。各項目はデータを2番目のビューに渡す必要があります。他の世界では、2番目のビューに現在のビューをnavigationControllerで渡します。準備機能が呼び出されていない - swift 3

class GroupsViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate { 

.... 
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    // handle tap events 

    var group = self.items[indexPath.item] 

    var cat_title = group.cat_title 

    self.navigationController!.pushViewController(self.storyboard!.instantiateViewController(withIdentifier: "GroupSubOneTableViewController") as UIViewController, animated: true) 

} 

.... 

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

     print("ooopps") 
     if (segue.identifier == "GroupSubOneTableViewController") { 
      let navController = segue.destination as! UINavigationController 
      let detailController = navController.topViewController as! GroupSubOneTableViewController 
      //detailController.currentId = nextId! 

      print("selected GroupSubOneTableViewController") 
     } 
    } 

ただし、コンソールログには何も表示されません。

+0

「準備」は、セグを実行するときにのみ呼び出されます – redent84

答えて

1

ここでは、perfomSeguepushViewControllerの2種類が混ざっています。 perform​Segue(with​Identifier:​sender:​) は、performSegueを使用してセグを実行するときに呼び出されます。したがって、SourceVCからDestinationVCに1つのセグを作成してください。

pushViewControllerに行きたい場合は、ViewControllerにキャストUIViewControllerと入力するだけでデータを渡すことができます。

let vc = self.storyboard!.instantiateViewController(withIdentifier: "GroupSubOneTableViewController") as! GroupSubOneTableViewController 
//pass vaue 
vc.passStr = "Hello" 
self.navigationController?.pushViewController(vc, animated: true) 
1

pushViewControllerはセグを実行しないため呼び出されません。

pushViewControllerの代わりにperformSegue(withIdentifier: "GroupSubOneTableViewController", sender: self)に電話する必要があります。

もちろん、ストーリーボードにも設定する必要があります。

関連する問題