uitableview - subclassed uitableviewcell subview color -
uitableview - subclassed uitableviewcell subview color -
i got unusual issue (in opinion;)) considering subclass of uitableview cell. code subclass is:
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) } }
now create these cells in view controller follows:
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)" allow info = db.query("select * level_detail main_level =\(mainlevelnr!) , sub_level = \(indexpath.row+1)")[0] var levelscore: int = 0 if allow columnvalue = data["completed"]{ levelscore = columnvalue.asint() if (levelscore > 0){nextlevelcanbeplayed = true}else{nextlevelcanbeplayed = false} cell!.sublevelscore.image = uiimage(named: "\(levelscore)stars.png") } homecoming cell! }
my problem when view loads first time, sublevelback.backgroundcolor
set properly, ie. subview's color correct.
though when start scrolling, becomes bit of mess different cells having wrong background colors, , don't know how solve issue. don't have same issue image displayed in uiimageview btw.
i hope point me in right direction. kind regards, sander
if (indexpath.row == 0){nextlevelcanbeplayed = true} if(nextlevelcanbeplayed){ ...
the above code seems incorrect. you're trying maintain track of how many levels have been played, each time first cell gets re-rendered, nextlevelcanbeplayed
reset. perhaps seek if(nextlevelcanbeplayed || indexpath.row == 0){
.
the other thing you're making assumption table view re-render cells near viewport in order, isn't documented anywhere , isn't reliably true, , if you're scrolling in reverse direction. when table view re-builds cell 4 (nextlevelcanbeplayed
calculates , sets false) , maybe goes cell 3 next, , if 3 playable, nextlevelcanbeplayed
false , 3 show incorrect. starts making sense colors start erratically changing scroll , down.
my suggestion utilize uitableviewdatasource
methods , utilize work db , homecoming proper info objects represent state , info of cells.
uitableview swift
Comments
Post a Comment