cellForRowAt在childTableView中不起作用

问题描述 投票:0回答:2

我是一名入门级敏捷开发人员,正在个人应用程序中工作,但是我的“ tableViewController”出现了问题。

我有一个第一张表视图,我在其中从API中获取一些事件,然后,我试图做的就是每当选择一个事件时都显示一个“ detailViewController”。到目前为止,一切似乎都很完美,但是我的问题是我的“ detailsviewcontroller”具有事件的图像,标题...以及集成的“ tableview”以显示详细信息。此时,numberOfRowsInSection函数可以工作,但是从未调用cellForRowAt来填充集成的表视图。有什么帮助吗?我希望我的解释很清楚

这是“ childtableview”的代码,我想在其中显示事件详细信息(我正在尝试使用数组字符:

import UIKit
import SwiftyJSON

class ChildDetailsViewController: UIViewController, UITableViewDelegate {
    var event: JSON?
    let detailsTableView = UITableView()
    var characters = ["test1", "test2", "test3", "test4"]
    override func loadView() {
        print("details")
       super.loadView()
       view.addSubview(detailsTableView)
       detailsTableView.translatesAutoresizingMaskIntoConstraints = false
       detailsTableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
       detailsTableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
       detailsTableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
       detailsTableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
       detailsTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
       detailsTableView.dataSource = self
       detailsTableView.delegate = self
       detailsTableView.reloadData()
    }
}

extension ChildDetailsViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //this insctruction does print 4 
        print(characters.count)
        //but it doesn't return 4 cells in the tableview
        return characters.count
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    print(characters[indexPath.row])
    cell.textLabel?.text = characters[indexPath.row]
    return cell
  }
}

以及这里的detailsViewController的代码,其中包含图像和标题以及子tableview:

import UIKit
import  SwiftyJSON

class EventDetailsViewController: UIViewController {
    var event : JSON?

    @IBOutlet weak var segmentedController: UISegmentedControl!
    @IBOutlet weak var ticketsView: UIView!
    @IBOutlet weak var locationView: UIView!
    @IBOutlet weak var detailsView: UIView!
    @IBOutlet weak var eventImage: UIImageView!
    @IBOutlet weak var eventTitle: UILabel!
    let newView = UIView()
    let childDetails = ChildDetailsViewController()
    var views : [UIView]!

    override func viewDidLoad() {
        filltheImageAndTile()
        // add new view to the main view
        super.viewDidLoad()
        view.addSubview(newView)

        //locate it under the event image and the segnented controller
        newView.translatesAutoresizingMaskIntoConstraints = false
        newView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        newView.topAnchor.constraint(equalTo: segmentedController.bottomAnchor, constant: 25).isActive = true
        newView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        newView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        views = [UIView]()
        views.append(ChildDetailsViewController().view)
        views.append(ChildLocationViewController().view)

        for itemView in views {
            newView.addSubview(itemView)
        }
        newView.bringSubviewToFront(ChildDetailsViewController().view)
    }

    @IBAction func segmentedControlOptionChanged(_ sender: UISegmentedControl) {
        newView.bringSubviewToFront(views[sender.selectedSegmentIndex])
    }

    @IBAction func backButtonClicked(_ sender: UIBarButtonItem) {
        self.navigationController?.dismiss(animated: true)
    }
}
ios swift uitableview uisegmentedcontrol pass-data
2个回答
0
投票

1-此

views.append(ChildDetailsViewController().view)
views.append(ChildLocationViewController().view)

不是添加包含的vcs检查Adding a view controller as a subview in another view controller的正确方法>

2-您需要为newView设置高度/底部约束


0
投票

问题是您正在创建ChildDetailsViewController的实例并将其视图添加到views数组,但是ChildDetailsViewController的实例永远不会保存在任何地方,也永远不会将其添加到父视图控制器。并且newView.bringSubviewToFront(ChildDetailsViewController().view)该行将无济于事,因为您正在创建一个新实例并将其视图置于最前面,但从未将其添加到超级视图中的任何位置

© www.soinside.com 2019 - 2024. All rights reserved.