gpt4 book ai didi

ios - Swift UITableView 不显示内容

转载 作者:行者123 更新时间:2023-11-28 06:10:33 25 4
gpt4 key购买 nike

我有一个侧边菜单,我想为每个选择加载一个新的 ViewController(基本上每个页面都有一个单独的 ViewController)。

这是我加载新 ViewController 的相关代码:

    viewController = storyboard!.instantiateViewController(withIdentifier: "commissionsViewController")

var viewInAction = UIView()

viewInAction = viewController.view

let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapOnView))

viewInAction.addGestureRecognizer(gestureRecognizer)

viewInAction.layer.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0).cgColor

viewInAction.translatesAutoresizingMaskIntoConstraints = false


if let subview = containerView.viewWithTag(100) {
subview.removeFromSuperview()
}


containerView.insertSubview(viewInAction, belowSubview: menuView)

setConstrainsOnView(viewObject: viewInAction)

这是加载的 ViewController 的代码:

import UIKit

class CommissionsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var tableView = UITableView()
var tableData = ["Beach", "Clubs", "Chill", "Dance"]

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

tableView = UITableView(frame: self.view.bounds, style: UITableViewStyle.plain)
tableView.dataSource = self
tableView.delegate = self
tableView.backgroundColor = UIColor.blue

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "my")

tableView.contentInset.top = 20

let contentSize = self.tableView.contentSize
let footer = UIView(frame: CGRect(x: self.tableView.frame.origin.x,
y: self.tableView.frame.origin.y + contentSize.height,
width: self.tableView.frame.size.width,
height: self.tableView.frame.height - self.tableView.contentSize.height))

self.tableView.tableFooterView = footer


view.addSubview(tableView)

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "my", for: indexPath)
cell.textLabel?.text = "This is row \(tableData[indexPath.row])"

return cell
}

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

问题:如您所见,CommissionsViewController 包含一个以编程方式添加的 tableView。该 tableView 没有显示任何单元格!基本上永远不会调用方法 cellForRowAt !我不明白为什么!

我可以看到一个蓝色 View ,它是 tableView 的背景,所以 tableView 就位,但它没有加载单元格!

方法 numberOfRowsInSection 被调用。

我尝试使用调试器对其进行调试,但没有结果。我根本不明白这个流程。

恭敬地感谢您。

最佳答案

当您将另一个 viewController 的 View 添加到您的 View 层次结构时,您必须通知两个 viewController(有关更多信息,请参阅 this answer)。

像这样添加 addChildViewControllerdidMoveToParentViewController 调用:

viewController = storyboard!.instantiateViewController(withIdentifier: "commissionsViewController")

self.addChildViewController(viewController)
var viewInAction = viewController.view
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapOnView))
viewInAction.addGestureRecognizer(gestureRecognizer)
viewInAction.layer.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0).cgColor
viewInAction.translatesAutoresizingMaskIntoConstraints = false
if let subview = containerView.viewWithTag(100) {
subview.removeFromSuperview()
}
containerView.insertSubview(viewInAction, belowSubview: menuView)
setConstrainsOnView(viewObject: viewInAction)
viewController.didMoveToParentViewController(self)

关于ios - Swift UITableView 不显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46855433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com