我有一个模型对象,它有一个数组,我需要通过indexPath.row填充数据,而不是需要将每个节数组发送到另一个tableView,但是它向我发送了随机数据,我如何才能将特定的选定行数组发送到下一个tableView呢?请帮助我理解..
这是我的模型对象:
class ProductModel {
var name:String
var option: [String]
var image:UIImage
init(name:String,option:[String],image:UIImage) {
self.image = image
self.name = name
self.option = option
}
}
这是我的模型对象:
class Data {
static var product = [ProductModel]()
}
这是用于追加数据的数据功能
static func read(compleationHandler:@escaping () -> ()) {
let hospitalList:[String] = ["A","B,C"]
let hospitalTwo:[String] = ["Sharee bangla","National Park","bangladesh medical"]
let hospitalThree:[String] = ["NSU","MIU","UIU","AIUB"]
let hospitalFour:[String] = ["Dhaka","Comillah","Borials"]
let hospitalFive:[String] = ["iPhone","iPad","iMac"]
DispatchQueue.global(qos: .userInteractive).async {
if Data.product.count == 0 {
Data.product.append(ProductModel(name: "Mahmud", option: hospitalList, image: #imageLiteral(resourceName: "radio")))
Data.product.append(ProductModel(name: "Rangon", option: hospitalTwo, image: #imageLiteral(resourceName: "pause.on.fw")))
Data.product.append(ProductModel(name: "Saikot", option: hospitalThree, image: #imageLiteral(resourceName: "Unit.fw")))
Data.product.append(ProductModel(name: "Ratul", option: hospitalFour, image: #imageLiteral(resourceName: "Region.fw")))
Data.product.append(ProductModel(name: "Jubayer", option: hospitalFive, image: #imageLiteral(resourceName: "add-note.fw")))
}
DispatchQueue.main.async {
compleationHandler()
}
}
}
这是第一个ViewDidLoad和存储单元数组的全局数组:
class ModelTableView: UIViewController {
var optionData:[String] = [String]()
@IBOutlet var ModelDataTableVIew: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
ModelDataTableVIew.delegate = self
ModelDataTableVIew.dataSource = self
ModelFunction.read { [weak self] in
self?.ModelDataTableVIew.reloadData()
}
}
}
这里是cellForRowAtIndex,我在标签中创建了该标签,并添加了一个Gesture。当用户单击它时,将显示另一个具有该单元格数组数据的tableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == Data.product.count {
let cell = ModelDataTableVIew.dequeueReusableCell(withIdentifier: "modelCellBtn") as! ModelCellBtn
return cell
} else {
let cell = ModelDataTableVIew.dequeueReusableCell(withIdentifier: "modelCell") as! ModelCell
cell.configureCell()
optionData = Data.product[indexPath.section].option
let tapGeshture = UITapGestureRecognizer(target: self, action: #selector(tapped(_:)))
cell.optionLabel.addGestureRecognizer(tapGeshture)
cell.nameImage.image = Data.product[indexPath.row].image
return cell
}
在这里准备Segue并将数据发送到下一个视图控制器:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "option") {
let dest = segue.destination as! OptionViewController
dest.data = optionData
}
}
这是我的nextViewController(用于显示选项数据):
class OptionViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
var data:[String] = []
@IBOutlet weak var optionTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
optionTableView.delegate = self
optionTableView.dataSource = self
print(data)
optionTableView.reloadData()
ModelFunction.read { [weak self] in
self?.optionTableView.reloadData()
}
}
}
这里是View Controller选项,在此控制器中,我想在tableView中显示检索到的数组
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = optionTableView.dequeueReusableCell(withIdentifier: "optionCell") as! OptionCell
//cell.textLabel?.text = Data.product[indexPath.section].option[indexPath.row]
cell.textLabel?.text = data[indexPath.row]
return cell
}
但是它向我显示了tableView中的单个节数据。
答案 0 :(得分:1)
您要在cellForRow方法中使用optionData,该方法始终会获取lastVisible数据,您应该在didSelectRowAt方法中使用optionData
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("didselect")
optionData = Data.product[indexPath.row].option
performSegue(withIdentifier: "option", sender: self)
}
尝试并分享您的结果。