Этот вопрос был переписан, чтобы правильно донести намерения автораProgramatically изменения нескольких UIViews в masterDetail App
У меня есть MasterDetail приложение, которое в конечном счете станет способом отслеживать количество «игроков» через фиксированное количество «проблем» (точнее, 60). Задачи одинаковы для каждого игрока, в то время как статус каждого игрока по отдельным задачам может быть разным. Все данные о игроках хранятся в базе данных Postgres, а затем извлекаются с использованием JSONModel в LeftViewController. Я получаю все данные правильно из БД, и я успешно помещал его в NSMutableDictionary. Данные в словаре выглядит следующим образом (это один игрок):
player = (
{
id = 9;
name = "Arthur Dent";
currentChallenge = "Cooking";
timeStarted = "04 Jul 2013 1:08 PM";
challengesDone = (
{
challengeName = "Flying";
timeCompleted = "04 Jul 2013 12:08 PM";
}
);
nextChallenge = "Swimming";
freePass = (
Running,
"Climbing"
);
},
Как вы можете видеть, у игрока есть какие-то проблемы «Done» («Готово»), некоторые ему не нужно делать («pass»), один он делает («currentChallenge») и один вызов, который он будет делать дальше («nextChallenge»). Для каждого из этих состояний, в котором может находиться игрок, я хочу, чтобы «Задачи», которые находятся в RightViewController, были закодированы цветом, чтобы вы могли понять, что происходит с первого взгляда. Мне нужны «вызовы», чтобы загорать разные цвета, основываясь на статусе игрока, который определяется данными, которые находятся в моем NSMutableDictionary.
Путем создания массивов из данных в NSDictionary я могу получить цвета, чтобы изменить, делая это:
if ([freePassArray containsObject:@"challenge three name"])
{
UIImage *image = [UIImage imageNamed:@"status_pass.png"]; //status_pass.png is my color
[challengeThreeImageView setImage:image];
}
Но если бы я сделал это так, я должен был бы написать 240, если и еще если заявления для охвата всех возможных статусов по всем 60 вызовам.
Мои массивы содержат только данные игрока выбраны потому, что я передаю данные через примерно так:
* LeftViewController.m * didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//Re-fetch the feed from the Postgres Database when a user selects an entry
[JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
NSError* error = nil;
_feed = [[PostgresFeed alloc] initWithDictionary:json error:&error];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil userInfo:[[json objectForKey:@"preclear"] objectAtIndex:indexPath.row]];
}];
Player *selectedPlayer = [_players objectAtIndex:indexPath.row];
if (_delegate)
{
[_delegate selectedPlayer:selectedPlayer];
}
}
Так образы обыкновение устанавливать для всех игроки сразу, но они также не очищаются после выбора другого игрока.
Как мне изменить цвет, не записывая выражения 240 if и else if? и как я могу получить цвета, когда я выбираю другого игрока?
только для уточнения, у вас есть список игроков, а в подробном представлении у вас есть все 50 задач. И для каждого выбора пользователя вы хотите увидеть, какая из 50 задач выполнена, свободна, текущая и проходит. это верно? – Vame
@Vame Да, наверное, я мог так сказать. Ты прав. – CaptJak
Я в замешательстве - что это имеет отношение к JSON? У вас есть значения, которые вы хотите использовать для управления состоянием определенных компонентов представления. Откуда взялись эти ценности, не имеет значения. –