ios - Setting a Row as Selected Based off of NSUserDefaults Value? -
i'm working on view player can choose character play with. have tableview each row represents character. inside each row button player taps select respective character. first time user loads it, 1 character available (first row) , following in viewdidload:
//if not selected character exists set default character if (![[nsuserdefaults standarduserdefaults] integerforkey:@"current character"]) { [[nsuserdefaults standarduserdefaults] setinteger:0 forkey:@"current character"]; [[nsuserdefaults standarduserdefaults] synchronize]; } nslog(@"value: %d", [[nsuserdefaults standarduserdefaults] integerforkey:@"current character"]);
by default of buttons in each row hidden revealing lock image behind it. following in cellforrowatindexpath method:
//check unlocked items switch (indexpath.row) { case 0: { //always show since available cell.playerbutton.hidden = no; break; } case 1: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item2unlocked"]) { cell.playerbutton.hidden = no; } else { cell.playerbutton.hidden = yes; } break; } case 2: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item3unlocked"]) { cell.playerbutton.hidden = no; } else { cell.playerbutton.hidden = yes; } break; } case 3: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item4unlocked"]) { cell.playerbutton.hidden = no; } else { cell.playerbutton.hidden = yes; } break; } default: break; }
everything working great far. the problem i'm facing figuring out how update button in correct row selected state. i've tried doing following, ends updating more 1 button:
//check unlocked items switch (indexpath.row) { case 0: { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 0) { cell.playerbutton.selected = yes; } else { cell.playerbutton.selected = no; } break; } case 1: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item1unlocked"]) { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 1) { cell.playerbutton.selected = yes; } else { cell.playerbutton.selected = no; } } else { cell.playerbutton.hidden = yes; } break; } case 2: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item2unlocked"]) { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 2) { cell.playerbutton.selected = yes; } else { cell.playerbutton.selected = no; } } else { cell.playerbutton.hidden = yes; } break; } case 3: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item3unlocked"]) { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 3) { cell.playerbutton.selected = yes; } else { cell.playerbutton.selected = no; } } else { cell.playerbutton.hidden = yes; } break; } default: break; }
what's wrong here?
update
doing following, selected state worked:
//check unlocked items switch (indexpath.row) { case 0: { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 0) { cell.playerbutton.selected = yes; nslog(@"character selected."); } else { cell.playerbutton.selected = no; } break; } case 1: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item1unlocked"]) { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 1) { cell.playerbutton.selected = yes; nslog(@"character b selected."); } else { cell.playerbutton.selected = no; } } else { cell.playerbutton.hidden = yes; } break; } case 2: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item3unlocked"]) { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 2) { cell.playerbutton.selected = yes; nslog(@"character c selected."); } else { cell.playerbutton.selected = no; } } else { cell.playerbutton.hidden = yes; } break; } case 3: { if([[nsuserdefaults standarduserdefaults] boolforkey:@"item4unlocked"]) { cell.playerbutton.hidden = no; if ([[nsuserdefaults standarduserdefaults] integerforkey:@"current character"] == 3) { cell.playerbutton.selected = yes; nslog(@"character d selected."); } else { cell.playerbutton.selected = no; } } else { cell.playerbutton.hidden = yes; } break; } default: break; }
however how can disable button or user interaction if button selected?
this should same thing , lot simpler
//check unlocked items int currentcharacter=[[nsuserdefaults standarduserdefaults] integerforkey:@"current character"]; bool unlocked=no; if (indexpath.row == 0) { unlocked=yes; // character 0 unlocked } else { unlocked=[nsuserdefaults standarduserdefaults] boolforkey:[nsstring stringwithformat:"%@item%dunlocked",indexpath.row]] } if (unlocked) { cell.playerbutton.hidden=no; if (indexpath.row == currentcharacter) { cell.playerbutton.selected=yes; cell.playerbutton.enabled=no; //cannot select if selected } else { cell.playerbutton.selected=no; cell.playerbutton.enabled=yes; } } else { cell.playerbutton.hidden=yes; }
Comments
Post a Comment