Перезагрузка UITableView на основе настроек в приложении iOS - PullRequest
0 голосов
/ 24 июля 2011

Я пытаюсь заставить UITableView зависеть от настроек в приложении. В зависимости от значения параметра, UITableView (в RootViewController) будет отображать соответствующее количество ячеек в таблице. Я проверяю настройку (которая устанавливается другим ViewController и определяю ячейки, которые должны отображаться в методе viewWillAppear RootViewController. Вот код:

   - (void)viewWillAppear:(BOOL)animated
    {
        if (menuList != nil) {
            [menuList dealloc];
            //[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
        }

    coreViewController.RootView = self;
    //[self.tableView reloadData];

    [[UIApplication sharedApplication] delegate];

    self.title = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
    MyAppAppDelegate *appDelegate = (MyAppAppDelegate *)[[UIApplication sharedApplication] delegate];

    menuList = [[NSMutableArray alloc] init];
    [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"App Setup", @"App Setup"),kSelectKey, NSLocalizedString(@"Setup App Details",@"App Setup2"),kDescriptKey, nil, kControllerKey,nil]];
    [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 1", @"Selection 1"),kSelectKey, NSLocalizedString(@"Selection 1",@"Selection 1"),kDescriptKey, nil, kControllerKey,nil]];
    [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 2", @"Selection 2"),kSelectKey, NSLocalizedString(@"Selection 2",@"Selection 2"),kDescriptKey, nil, kControllerKey,nil]];

    if (appDelegate.Level == 1) {
        [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 3", @"Selection 3"),kSelectKey, NSLocalizedString(@"Selection 3",@"Selection 3"),kDescriptKey, nil, kControllerKey,nil]];
    }
    if (appDelegate.Level == 2) {
        [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 3", @"Selection 3"),kSelectKey, NSLocalizedString(@"Selection 3",@"Selection 3"),kDescriptKey, nil, kControllerKey,nil]];
        [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 4", @"Selection 4"),kSelectKey, NSLocalizedString(@"Selection 4",@"Selection 4"),kDescriptKey, nil, kControllerKey,nil]];
    }
    if (appDelegate.Level == 3) {
        [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 3", @"Selection 3"),kSelectKey, NSLocalizedString(@"Selection 3",@"Selection 3"),kDescriptKey, nil, kControllerKey,nil]];
        [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 4", @"Selection 4"),kSelectKey, NSLocalizedString(@"Selection 4",@"Selection 4"),kDescriptKey, nil, kControllerKey,nil]];
        [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Selection 5", @"Selection 5"),kSelectKey, NSLocalizedString(@"Selection 5",@"Selection 5"),kDescriptKey, nil, kControllerKey,nil]];
    }
    //add the final selection so that it is always last in the list
    [menuList addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Final Selection", @"Final Selection"),kSelectKey, NSLocalizedString(@"Final Selection",@"Final Selection"),kDescriptKey, nil, kControllerKey,nil]];
    //[self.tableView reloadRowsAtIndexPaths:menuList withRowAnimation:true];



    //[appDelegate.lastView replaceObjectAtIndex:0 withObject:[NSNumber numberWithInteger:-1]];
    //[appDelegate.lastView replaceObjectAtIndex:1 withObject:[NSNumber numberWithInteger:-1]];
    [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    //[super viewWillAppear:animated];
}

Как видите, я пробовал несколько разных вещей, чтобы перерисовать таблицу (я оставил комментированные). Когда код выполняется, таблица воссоздается, но ячейки для выбора 3 не обновляются. (Я хочу, чтобы в ячейках отображались только доступные варианты выбора в зависимости от уровня, выбранного в приложении)

примечание: Я пытался использовать [self.tableView reloadData];, и он не перезагружает третью ячейку в таблице. Я забыл включить эту информацию. Что происходит при начальной загрузке таблицы выглядит так:

Settings >
Selection 1>
Selection 2>
Final Selection> 

Когда я меняю уровень, таблица выглядит так:

Settings >
Selection 1>
Selection 2>
Final Selection>
Selection 4>
Final Selection>

Это происходит независимо от того, как я перезагружаю таблицу (даже используя reloadData).

Я уверен, что упускаю что-то очень очевидное, и я ценю любую помощь, оказанную.

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Почему бы просто не сказать [self.tableView reloadData]? Что должно сделать это?

1 голос
/ 25 июля 2011

что не так с [self.tableView reloadData]?и, если вы хотите, чтобы ваш [self.tableView reloadRowsAtIndexPaths:menuList withRowAnimation:true]; работал, вы должны дать ему массив с indexPathes, а не массив, содержащий все данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...