如何显示数据到UITableView中属于模型数组对象的“来自数组的tableView”?

时间:2018-08-23 08:32:56

标签: ios swift uitableview

我有一个模型对象,它有一个数组,我需要通过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中的单个节数据。

1 个答案:

答案 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)
}

尝试并分享您的结果。