我正在構建一個日曆應用程序,其中某人某天的空閒時間將以短消息和三種不同圖像之一作爲此單元格的背景突出顯示。如何阻止我的細胞圖像每次從屏幕熄滅時改變?
什麼是最好的方法來停止圖像每次細胞熄滅屏幕時改變? 這個邏輯應該在UITableViewCell中嗎?
class FreeTimeCell: UITableViewCell {
@IBOutlet weak var background: UIImageView!
@IBOutlet weak var freeTimeMessage: UILabel!
@IBOutlet weak var freeTimePeriod: UILabel!
@IBOutlet weak var freeTime: UILabel!
var timeblock: Timeblock! {
didSet {
self.freeTimePeriod.text = "\(timeblock.startTime.dateToString()) - \(timeblock.endTime.dateToString())"
self.freeTime.text = "OccupiedTime.FreeTime".localized
self.freeTimeMessage.text = MessagesInteractor.getFreetimeTimeblock()
let randomNumber = arc4random_uniform(3)
let imageName = "freetime\(randomNumber)"
self.background.image = UIImage(named: imageName)
}
}
override func awakeFromNib() {
super.awakeFromNib()
//removes highlighting of the cell when tapping on it
self.selectionStyle = UITableViewCellSelectionStyle.none
}
TableViewController
/**
Checks which data cell type belongs to this cell, and returns correct table cell accordingly
*/
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch self.dataCells[indexPath.row].cellType {
case .ConflictHeader, .TimeToFirstMeetingHeader :
return self.generateHeaderCell(indexPath: indexPath)
case .FreeTime:
return self.generateFreeTimeCell(indexPath: indexPath)
case .SingleMeeting:
return self.generateSingleMeetingCell(dataCell: self.dataCells[indexPath.row], indexPath: indexPath)
}
}
/**
Generates Free Time Cell (between meetings to show user free spot)
- parameter indexPath: used to dequeue the reusable cell
- returns: Free time cell generated
*/
private func generateFreeTimeCell(indexPath: IndexPath) -> FreeTimeCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "FreeTimeCell", for: indexPath) as! FreeTimeCell
cell.timeblock = self.dataCells[indexPath.row].timeblock
return cell
}
單元格在離開屏幕時會被重用,您不希望更改此行爲,因爲這樣做會佔用較少的內存。您只需設置圖像超時顯示單元格。 – rckoenes
@ rckoenes我很懷疑這件事是否可取。也許我應該創建一個類變量與最初分配的圖像,所以當一個新的隨機數生成時它不會改變? – Deco
另外,在你的代碼中,你是否讓一個單元出隊,看起來你每次都創建一個新的單元。你的應用程序將有非常好的牀位表現你需要使用['dequeueReusableCell(withIdentifier:)'](https://developer.apple.com/documentation/uikit/uitableview/1614891-dequeuereusablecell) – rckoenes