gpt4 book ai didi

uitableview - 子类 uitableviewcell subview 颜色

转载 作者:搜寻专家 更新时间:2023-10-31 23:05:00 25 4
gpt4 key购买 nike

考虑到 uitableview 单元格的子类,我遇到了一个奇怪的问题(在我看来;))。我的子类的代码是:

class SubLevelTableCell: UITableViewCell {
var subLevelLabel:UILabel
var subLevelBack:UIView
var subLevelScore:UIImageView

override init(style: UITableViewCellStyle, reuseIdentifier: String!)
{
self.subLevelBack = UIView()
self.subLevelLabel = UILabel()
self.subLevelScore = UIImageView()

super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)

self.subLevelLabel.textColor = whiteColor

self.subLevelLabel.font = UIFont(name: subLevelLabel.font.fontName, size: 20)

self.addSubview(self.subLevelBack)
self.subLevelBack.addSubview(self.subLevelLabel)
self.subLevelBack.addSubview(self.subLevelScore)
}

required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func layoutSubviews() {
self.subLevelBack.frame = CGRectMake(10, 10, self.bounds.size.width-20, self.bounds.size.height-20)
self.subLevelLabel.frame = CGRectMake(5, 0, subLevelBack.frame.size.width/2-10, subLevelBack.frame.size.height)
self.subLevelScore.frame = CGRectMake(subLevelBack.frame.size.width-120, 15, 100, subLevelBack.frame.size.height-30)
}

}

现在我在我的 View Controller 中创建这些单元格如下:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:SubLevelTableCell? = SubLevelTable?.dequeueReusableCellWithIdentifier("Cell") as? SubLevelTableCell
if (cell == nil)
{
cell = SubLevelTableCell(style: UITableViewCellStyle.Subtitle,
reuseIdentifier: "Cell")
cell!.backgroundColor = grayColor
}
if (indexPath.row == 0){nextLevelCanBePlayed = true}
if(nextLevelCanBePlayed){
canBePlayedArray[indexPath.row] = true
cell!.subLevelBack.backgroundColor = blueColor
}else{
canBePlayedArray[indexPath.row] = false
cell!.subLevelBack.backgroundColor = redColor
}
cell!.subLevelLabel.text = "Stage \(indexPath.row+1)"
let data = db.query("SELECT * FROM LEVEL_DETAIL WHERE MAIN_LEVEL =\(MainLevelNr!) AND SUB_LEVEL = \(indexPath.row+1)")[0]
var levelScore: Int = 0
if let columnValue = data["COMPLETED"]{
levelScore = columnValue.asInt()
if (levelScore > 0){nextLevelCanBePlayed = true}else{nextLevelCanBePlayed = false}
cell!.subLevelScore.image = UIImage(named: "\(levelScore)Stars.png")
}
return cell!
}

我的问题是,当 View 第一次加载时,subLevelBack.backgroundColor 设置正确,即。 subview 的颜色是正确的。

虽然当我开始滚动时,不同单元格的背景颜色不正确变得有点乱,我不知道如何解决这个问题。顺便说一句,我对 UIImageView 中显示的图像没有同样的问题。

我希望有人能给我指出正确的方向。亲切的问候,桑德

最佳答案

if (indexPath.row == 0){nextLevelCanBePlayed = true}
if(nextLevelCanBePlayed){ ...

上面的代码似乎不正确。您正在尝试跟踪已播放了多少个级别,但每次重新呈现第一个单元格时,nextLevelCanBePlayed 将被重置。也许只尝试 if(nextLevelCanBePlayed || indexPath.row == 0){

另一件事是您假设 TableView 将按顺序在视口(viewport)附近重新渲染其单元格,但没有在任何地方记录并且很可能不可靠,如果您' 正在向相反方向滚动。因此,当 TableView 重新构建单元格 4(nextLevelCanBePlayed 计算并设置为 false)并可能接下来返回到单元格 3 时,即使 3 实际上可以播放,nextLevelCanBePlayed将是错误的,3 将显示不正确。当您上下滚动时,您的颜色开始不规律地变化,这就开始变得有意义了。

我的建议是正确使用您的 UITableViewDataSource 方法,并使用这些方法处理数据库并返回代表单元格状态和数据的正确数据对象。

关于uitableview - 子类 uitableviewcell subview 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207320/

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