Search code examples
arraysswiftuikit

how to pass image and label from one viewController to tableViewCell swift?


Hi im trying to pass data from one viewController to tableViewCell without using the segue, i tried with delegate and nsNotificationCenter but it did not work with me so, help me please.

this is my code for the view controller which i want to pass data from it ( imageViewSweet, LabelSweet )

   import UIKit


  class sweetAndSalty4ViewController: UIViewController {




@IBOutlet var imageViewSweet: UIImageView!


@IBOutlet var labelsweet: UILabel!


@IBOutlet var sweeetTable: UITableView!


 var passText: String?



override func viewDidLoad() {
    
    
    passText = labelsweet.text
    
    
    
    super.viewDidLoad()

  

}




@IBAction func sendData(_ sender: UIButton) {
    
    
     let sb = storyboard?.instantiateViewController(withIdentifier: "cartVC") as!       cartViewController
      sb.priceLabel = labelsweet
    present(sb, animated: true, completion: nil)

    

                
      }
  





 }

and this is the code for the viewController which i want to display the image and the label from the swwetAndSalty4ViewController .

  import UIKit

  class cartViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var priceLabel: UILabel!

var passText: String?

var cartItem = ""


@IBOutlet var cartTable: UITableView!



      override func viewDidLoad() {
          

          cartTable.delegate = self
          cartTable.dataSource = self
          
          
               
             
                   //  foodTable.separatorStyle = .none

          
          view.backgroundColor = UIColor.init(red: 228/255, green: 230/255, blue: 234/255, alpha: 1)
                   navigationItem.title = "My Cart"
          
          super.viewDidLoad()
          // Do any additional setup after loading the view.
      }

      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
          
          
          return cartItem.count
      }








      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
          240
      }
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
          
          
          let cell = tableView.dequeueReusableCell(withIdentifier: "cartCell") as! cartTableViewCell
          
          
        
          
              cell.layer.cornerRadius = 30
                 
                 cell.layer.borderWidth = 15.0
                 cell.layer.borderColor = UIColor.white.cgColor
                 
                 
                 
        cell.cartImage.layer.masksToBounds = true
                 cell.cartImage.layer.cornerRadius = 2
                 cell.cartImage.translatesAutoresizingMaskIntoConstraints = false
                 cell.cartImage.contentMode = .scaleAspectFill
                 
                 
                 
                 cell.cartLabel.font = UIFont.systemFont(ofSize: 16, weight: .medium)
                 
                 cell.cartLabel.textColor = .black
                 cell.cartLabel.translatesAutoresizingMaskIntoConstraints = false
          cell.cartLabel.backgroundColor = .systemGray5
                
                 
                 
                 cell.cartLabel.text = ""
                 cell.cartImage.image = UIImage(named: "")
             
                 
          
               //  cell.contentView.backgroundColor = .white
                
                 
          
          
          
          
          
          
          
          
          
          
          return cell
          
      }
      
  
  
  
  
  }

Solution

  • There you go, i've also organized your code: First View Controller:

    import UIKit
    
    struct myVariables {
        static var kinder: String! = nil
        static var kinderImage: UIImage! = nil
    }
    
    class sweetAndSalty4ViewController: UIViewController {
        
        @IBOutlet var imageViewSweet: UIImageView!
        @IBOutlet var labelsweet: UILabel!
        @IBOutlet var sweeetTable: UITableView!
        
        var passText: String?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            passText = labelsweet.text
        }
    
        @IBAction func sendData(_ sender: UIButton) {
            let sb = storyboard?.instantiateViewController(withIdentifier: "cartVC") as!       cartViewController
             sb.priceLabel = labelsweet
           present(sb, animated: true, completion: nil)
        }
        
        func sendDataToMyVariables(kinder: String, kinderImage: UIImage) {
            myVariables.kinder = kinder
            myVariables.kinderImage = kinderImage
        }
        
     }
    

    and then, after you send the variables you can use them anywhere in your code by doing

    myVariables.kinder // get the string
    myVariables.kinderImage // get the image