繁体   English   中英

未调用UITableView委托方法。 从另一个类创建

[英]UITableView delegate methods not being called. Created from another class

我正在尝试从另一个类添加UITableView ,但未调用delegate方法。 仅调用numberOfRowsInSection方法。 我知道我可以在主ViewController执行此操作,但是我想在另一个类中执行此操作。 可能吗? 该代码具有完整的功能,只需将其复制并粘贴到项目中即可。 谢谢!

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let t = Table()
        t.create()
    }
}

class Table: UIViewController, UITableViewDelegate, UITableViewDataSource {

    private let myArray: NSArray = ["First","Second","Third"]

 func create() {
        let barHeight = UIApplication.shared.statusBarFrame.size.height
        let displayWidth = UIScreen.main.bounds.width
        let displayHeight = UIScreen.main.bounds.height

        let myTableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: displayWidth, height: displayHeight - barHeight))
        myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
        UIApplication.shared.delegate?.window??.rootViewController?.view.addSubview(myTableView)
        myTableView.dataSource = self
        myTableView.delegate = self
        myTableView.backgroundColor = UIColor.red
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Num: \(indexPath.row)")
        print("Value: \(myArray[indexPath.row])")
    }

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

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

}

运行此命令时:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let t = Table()
        t.create()
    }
}

您已经创建了局部变量t 离开viewDidLoad()函数后, t将不再存在-因此就没有要调用的委托方法。

而是创建一个将保留的类级变量:

class ViewController: UIViewController {

    let t = Table()

    override func viewDidLoad() {
        super.viewDidLoad()
        t.create()
    }
}

我认为它没有被调用是由于Tablview没有添加到self.view或其他。 因此您需要在设置tableview之后添加此行。

func create() {
        let barHeight = UIApplication.shared.statusBarFrame.size.height
        let displayWidth = UIScreen.main.bounds.width
        let displayHeight = UIScreen.main.bounds.height

        let myTableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: displayWidth, height: displayHeight - barHeight))
        myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
        UIApplication.shared.delegate?.window??.rootViewController?.view.addSubview(myTableView)
        myTableView.dataSource = self
        myTableView.delegate = self
        myTableView.backgroundColor = UIColor.red
        self.view.addSubview(myTableView) //add this line 
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM