gpt4 book ai didi

ios - 未从自定义类调用 cellForRowAtIndexPath

转载 作者:搜寻专家 更新时间:2023-10-30 21:53:21 24 4
gpt4 key购买 nike

我正在使用 Xcode 7.0、Swift 2

我主要是尝试创建一个自定义类来构建一个 UITable,然后在 ViewController 中创建一个新的表对象并将其加载到自身中. View ;

我遇到的问题是函数 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 根本没有从自定义类中调用。我已经寻找解决方案 3 天了,我已经尝试过多次重建应用程序和代码,但都没有成功。

请注意,如果我在 ViewController.swift 文件中使用相同的代码(即构建表所需的一切;不包括初始化函数等),它可以正常工作。

我知道问题出在 cellForRowAtIndexPath 函数上,因为它在运行时不会打印出我在该代码块中设置的语句。所有其他函数都被调用,但由于某种原因没有被调用。不确定我是否在这里忽略了什么。任何帮助,将不胜感激。提前致谢。

class sideTest: NSObject, UITableViewDelegate, UITableViewDataSource {


let tesTable: UITableView = UITableView()
var items: [String]?
var mView: UIView = UIView()

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("The number of rows is: \(self.items!.count)")

return self.items!.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

print("\nLets create some cells.")

let sCell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!

sCell.textLabel?.text = self.items![indexPath.row]
sCell.textLabel?.textColor = UIColor.darkTextColor()

return sCell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("You selected cell #\(indexPath.row)!")
}

func tblSetup() {

self.tesTable.frame = CGRectMake(0, 0, 320, mView.bounds.height)
self.tesTable.delegate = self
self.tesTable.dataSource = self

self.tesTable.backgroundColor = UIColor.cyanColor()

// load cells
self.tesTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.tesTable.reloadData()

print("Currenlty in tblSetup.\nCurrent rows is: \(self.items!.count)")
}

//Init

override init() {
super.init()

self.items = nil

self.tblSetup()
}

init(sourceView: UIView , itemListAsArrayString: [String]) {
super.init()

self.items = itemListAsArrayString
self.mView = sourceView

self.tblSetup()
}
}

这是来自 ViewController.swift 的代码;请注意,表格已构建,但单元格不会填充,即使我通过以下操作手动输入单元格信息:sCell.textLabel?.text = "test cell"

class ViewController: UIViewController {



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

let myTable: sideTest = sideTest(sourceView: self.view, itemListAsArrayString: ["Cell 1", "Cell 2", "Cell 3"])
self.view.addSubview(myTable.tesTable)
}

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

再次感谢您的帮助。谢谢。

enter image description here

最佳答案

您的 View Controller 没有对您的 sideTest 变量的强引用。一旦你的 View 加载完成,你的 sideTest 是 nil。虽然你有一个 TableView (通过添加 subview ),但你不再有数据源。

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {}

在 View 加载后调用。这导致了问题。

将您的 View Controller 更改为:

    var tb :sideTest?


override func viewDidLoad() {
super.viewDidLoad()
let myTable: sideTest = sideTest(sourceView: self.view, itemListAsArrayString: ["Cell 1", "Cell 2", "Cell 3"])
print(myTable.tesTable.frame)
tb=myTable
self.view.addSubview(myTable.tesTable)
}

将您的 cellforrowatindexpath 更改为:

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

print("create cells")
var cell :UITableViewCell?

if let sCell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell"){
cell=sCell

}else{
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")

}


cell!.textLabel?.text = self.items![indexPath.row]
cell!.textLabel?.textColor = UIColor.darkTextColor()

return cell!
}

这将解决大部分问题。

关于ios - 未从自定义类调用 cellForRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32671905/

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