Ios 是否基于NSUserDefaults值将行设置为选中?

Ios 是否基于NSUserDefaults值将行设置为选中?,ios,objective-c,uitableview,nsindexpath,Ios,Objective C,Uitableview,Nsindexpath,我目前正在开发一个视图,玩家可以在该视图中选择要玩的角色。我有一个tableView,其中每一行代表一个字符。每行中都有一个按钮,玩家点击该按钮可选择相应的角色。用户第一次加载它时,只有一个字符可用(第一行),我在viewDidLoad中执行以下操作: //If not selected character exists set it to the default character if (![[NSUserDefaults standardUserDefaults] integerForKe

我目前正在开发一个视图,玩家可以在该视图中选择要玩的角色。我有一个tableView,其中每一行代表一个字符。每行中都有一个按钮,玩家点击该按钮可选择相应的角色。用户第一次加载它时,只有一个字符可用(第一行),我在viewDidLoad中执行以下操作:

//If not selected character exists set it to the 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"]);
默认情况下,每行中的所有按钮均隐藏,并在其后面显示一个锁定图像。因此,我在cellForRowAtIndexPath方法中执行以下操作:

//CHECK FOR UNLOCKED ITEMS
switch (indexPath.row) {
    case 0: {
        //Always show since it will always be 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;
}
到目前为止,一切都很顺利我面临的问题是如何将正确行中的按钮更新为选定状态。我尝试了以下操作,但最终更新了多个按钮:

//CHECK FOR 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;
}
这里怎么了

更新 执行以下操作后,选定状态最终生效:

//CHECK FOR UNLOCKED ITEMS
switch (indexPath.row) {
    case 0: {
        cell.playerButton.hidden = NO;
        if ([[NSUserDefaults standardUserDefaults] integerForKey:@"Current Character"] == 0) {
            cell.playerButton.selected = YES;
            NSLog(@"Character is 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 is 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 is 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 is selected.");
            } else {
                cell.playerButton.selected = NO;
            }
        } else {
            cell.playerButton.hidden = YES;
        }
        break;
    }
    default:
        break;
}

但是,如果选择了按钮,如何禁用按钮或用户交互?

这应该做同样的事情,而且要简单得多

//CHECK FOR UNLOCKED ITEMS
   int currentCharacter=[[NSUserDefaults standardUserDefaults] integerForKey:@"Current Character"];
   BOOL unlocked=NO;

   if (indexPath.row == 0)
   {
       unlocked=YES;        // Character 0 is always 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 already selected
      }
      else
      {
          cell.playerButton.selected=NO;
          cell.playerButton.enabled=YES;
      }
   }
   else
   {
      cell.playerButton.hidden=YES;
   }

发生这种情况是因为在UserDefault中有@“Current Character”的值为2,3,4。你应该排除这些。谢谢你的时间@NeverBe,但你能更详细一点吗,对不起。如果条件太多,你能简单点吗?你选择了不止一个按钮@user1886754?也显示didSelectRowAtIndexPath方法。@user1886754这就是问题所在。按下按钮后,尝试重新加载整个桌子