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

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -