Home > OS >  How to Navigate to new View Controller from collection view cell? In Swift
How to Navigate to new View Controller from collection view cell? In Swift

Time:09-17

I have two View controllers(VC-1, VC-2). View controller 1 is having a table view and further that table view is consists of 4 collection views. I want to navigate to new VC(VC-2). But unable to get "self.storyboard.instantiateViewController" in didSelect method of collection View. So now how I can navigate to VC-2

CodePudding user response:

You should use delegate. you can create a protocol and define a method for routing and implement it into VC1

CodePudding user response:

You can use the below sample code. This code is using closure syntax

class FirstVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "TableCell_Identifier") as! TableCell
        cell.configureCell(data: ["Your", "Data"])
        
        cell.didSelectRow = { data in
            // Goto second view controller
            let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondVC")
            self.navigationController?.pushViewController(vc!, animated: true)
        }
        return cell
    }
}

class TableCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {
    
    @IBOutlet weak var colView: UICollectionView!
    var didSelectRow: ((_ data: String) -> Void)? = nil // Closure
    
    var arrData = [String]()
    
    func configureCell(data: [String]) {
        // Setup CollectionView data
        self.arrData = data
        self.colView.reloadData()
    }
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.arrData.count
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CELL_IDENTIFIER", for: indexPath)
        
        return cell
    }
    
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        
        let data = self.arrData[indexPath.row]
        didSelectRow?(data)
    }
}

  • Related