ios - 未从自定义类调用 cellForRowAtIndexPath

标签 ios swift uitableview

我正在使用 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/

相关文章:

ios - UITableView 在更新 NSFetchedResultsController 时将滚动保持在正确的位置

ios - 无法调用参数列表类型

ios - UIApplicationSignificantTimeChange 通知未触发

ios - CVCalendar iOS 禁用日期在更改月份时不起作用

swift - 是否可以更改枚举中的关联值?

iOS 11 错误,didselectrowatindexpath 调用同时用两根手指点击单元格

ios - 如何更改 UIImageView 的来源

ios - 试图找出这次崩溃的原因

ios - 在不同的滑动 View 之间传递 UIPageViewController 中的数据

ios - UITableView 中的单元格只有在 iOS 中选择后才会更新(快速)