gpt4 book ai didi

ios - 外部类中的 UITableView 委托(delegate)和数据源不起作用

转载 作者:可可西里 更新时间:2023-11-01 01:29:28 25 4
gpt4 key购买 nike

我有一个简单的项目,添加了 UITableView 作为当前 View 的 subview ,以及创建委托(delegate)和数据源的外部 tableviewcontroller 类。

问题是除委托(delegate) didSelectedRowAtIndexPath 外,所有工作都正常,当我单击一行时,所有 tableview 都变成白色,这是代码:

主要类:

import UIKit

class ViewController: UIViewController {

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


let cont:Tbcontroller = Tbcontroller()
let tableViewInner = UITableView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width-(self.view.frame.width/6), height: 180))
tableViewInner.scrollEnabled = false
tableViewInner.separatorStyle = .None
tableViewInner.allowsSelection = true
tableViewInner.userInteractionEnabled = true
cont.type = 1
cont.setCurrentTableView(tableViewInner)
self.view.insertSubview(tableViewInner, atIndex: self.view.subviews.count+1)

}

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


}

外部类委托(delegate)数据源:

import UIKit

class Tbcontroller: UITableViewController {

var type:Int = 1

override func viewDidLoad() {
super.viewDidLoad()


}

func getCell() -> UITableViewCell{
let presentCell: UITableViewCell = UITableViewCell()
return presentCell

}

func setCurrentTableView(table:UITableView){

self.tableView = table
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.reloadData()
}

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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 4
}

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

let cell = getCell()
cell.textLabel?.text = "ciao"
cell.textLabel?.font = UIFont.systemFontOfSize(13)

return cell

}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

return 100

}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

print("clicked")

}

}

当我点击时,我没有看到输出“clicked”

最佳答案

您的主要问题是 TbController() 被释放。 UITableView 上的 dataSourcedelegate 属性很弱。因此,因为您只将 TbController 分配给局部变量和弱属性,它会被释放。

此外,UITableViewController 已经为您创建了一个 TableView。 “重新创建”它不是好的做法。我宁愿在 UITableViewController 中使用 TableView,并将 UITableViewController 的 View 作为 subview 添加到 UIViewController 的 View 中。

要修复,您需要 TbController 的实例变量。

带有用于 TbController 的 ivar 并使用 Tbcontroller 的 UITableView 的示例代码。

 import UIKit

class ViewController: UIViewController {

var cont: Tbcontroller = Tbcontroller()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
cont.type = 1
self.view.addSubview(cont.view)
}

}

import UIKit

class Tbcontroller: UITableViewController {

var type:Int = 1

override func viewDidLoad() {
super.viewDidLoad()
tableView.scrollEnabled = false
tableView.separatorStyle = .None
tableView.allowsSelection = true
tableView.userInteractionEnabled = true

self.tableView.delegate = self
self.tableView.dataSource = self
}

func getCell() -> UITableViewCell{
let presentCell: UITableViewCell = UITableViewCell()
return presentCell

}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 4
}

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

let cell = getCell()
cell.textLabel?.text = "ciao"
cell.textLabel?.font = UIFont.systemFontOfSize(13)

return cell

}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

return 100

}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

print("clicked")

}

}

关于ios - 外部类中的 UITableView 委托(delegate)和数据源不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39611038/

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