问题描述
您好,我试图在不使用segue的情况下将数据从一个viewController传递到tableViewCell,我尝试了使用委托和nsNotificationCenter,但它对我不起作用,请帮帮我。
这是我要从中传递数据的视图控制器代码(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)
}
}
这是viewController的代码,我想从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
}
}
解决方法
您去了,我也组织了您的代码: 第一视图控制器:
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
}
}
然后,在发送变量后,您可以在代码中的任何位置使用它们
myVariables.kinder // get the string
myVariables.kinderImage // get the image