gpt4 book ai didi

ios - 显示单元格数组中的自定义 UITableViewCell

转载 作者:行者123 更新时间:2023-11-30 13:50:20 25 4
gpt4 key购买 nike

我有一个UIViewController创建自定义 UITableViewCell并将其插入到数组中。然后我有一个UITableViewController我想显示以前数组中的单元格。问题在于 tableView(tableView:cellForRowAtIndexPath)我不想使用dequeueReusableCellWithIdentifier因为我只想从数组中获取单元格并使用它们。

不幸的是,这不起作用。我读过dequeueReusableCellWithIdentifier允许仅在内存中保存必要的单元格。

我正在考虑一种方法来将我的自定义单元格“推送”到该队列中,但我找不到任何东西。所以最后我无法显示我的自定义单元格。

注意:我无法使用 dequeueReusableCellWithIdentifier 获取单元格然后设置每个属性,因为其中之一是 UIProgressView它在我的自定义单元格类中更新,因此我需要显示该单元格。

这是 UIViewController 中的代码创建自定义单元并将其设置到数组中:

//here I create my custom cell (DownloadTVCell)
let cell = DownloadTVCell(style: UITableViewCellStyle.Default, reuseIdentifier: "DownloadRootTVC_IDcell")

cell.nomeFileInDownloadLabel.text = nomeCompletoMp3
//this is a method in DownloadTVCell that starts a download task
cell.createDownloadTask()

//here i got the navigationController in order to obtain the instance of
//the UITableViewController. In this method when a user tap on the
//UITableViewController it's already instantiated
let nc = self.tabBarController!.viewControllers![1] as! UINavigationController
let drtvc = nc.topViewController as! DownloadRootTVC

//now drtvc is the instance of DOwnloadRootTVC which is my custom UITableViewController
//add the cell to the array
drtvc.listOfCellsDownlaod.append(cell)

这是我的自定义单元格:

class DownloadTVCell: MGSwipeTableCell, NSURLSessionDownloadDelegate {

//******************************************************************
// IBOUtlet
//******************************************************************
@IBOutlet var nomeFileInDownloadLabel: UILabel!

@IBOutlet var quantitaScaricataLabel: UILabel!

@IBOutlet var progressView: UIProgressView!


private var downloadTask: NSURLSessionDownloadTask?

//******************************************************************
// METODI
//******************************************************************


override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

super.init(style: style, reuseIdentifier: reuseIdentifier)
log("ACTION", text: "Metodo chiamato")
build()
}

required init?(coder aDecoder: NSCoder) {

super.init(coder: aDecoder)
log("ACTION", text: "Metodo chiamato")

build()
}



override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

private func build() {
self.nomeFileInDownloadLabel = UILabel()
self.quantitaScaricataLabel = UILabel()
self.progressView = UIProgressView()
}

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

//here there is some logic for download
...
}

最后这是我的自定义 UITableView:

class DownloadRootTVC: UITableViewController {

//******************************************************************
// PROPRIETA' GENERICHE
//******************************************************************
var listOfCellsDownlaod = [DownloadTVCell]()

//******************************************************************
// METODI
//******************************************************************
override func viewDidLoad() {
log(text: "self.listOfCellsDownlaod.count: \(self.listOfCellsDownlaod.count)")

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

self.refreshControl?.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadTableData:", name: "reload", object: nil)

//self.tableView.registerClass(DownloadTVCell.self, forCellReuseIdentifier: "DownloadRootTVC_IDcell")

super.viewDidLoad()
}

func refresh(sender:AnyObject) {
self.tableView.reloadData()
self.refreshControl?.endRefreshing()
}

func reloadTableData(notification: NSNotification) {
tableView.reloadData()
}

override func viewDidAppear(animated: Bool) {
self.tableView.reloadData()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.listOfCellsDownlaod.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//let cell = tableView.dequeueReusableCellWithIdentifier("DownloadRootTVC_IDcell", forIndexPath: indexPath) as! DownloadTVCell

//I just want to return my custom cell
return self.listOfCellsDownlaod[indexPath.row]
}

}

最佳答案

您应该只添加单元格标识符,然后将 cellForRowAtIndexPath 中的单元格出队并在那里进行设置,而不是将 UITableViewCells 添加到数组中。如果您无法检索信息来填充 cellForRowAtIndexPath 中的单元格,则创建一个类或对象来保存单元格标识符以及填充单元格所需的所有信息(标签文本、图像) ImageView 的文件名等)。

请记住, TableView 单元格是 View 对象,您不应在 View 对象中包含逻辑。将所有逻辑放入一个单独的对象中,然后根据需要填充单元格。

关于ios - 显示单元格数组中的自定义 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370429/

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