Изменить количество строк в разделе в зависимости от переменной - PullRequest
0 голосов
/ 11 августа 2010

В моем «Секционированном» UITableView у меня есть два раздела: первый для атрибутов, таких как имя, и второй - для редактирования, где вы можете добавлять объекты.Вот его изображение:

альтернативный текст http://fwdr.org/bm9w

Существует атрибут, который пользователь может изменить (в данном случае Тип ), который будет изменять количествостроки во втором разделе.Чтобы быть более точным, если выбрано одно свойство, максимальное количество строк равно 2, и тогда не будет Добавить новую… строку.

Вот что я пробовал (в моем UITableViewController)…

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if ([self isToManyRelationshipSection:section]) {
        NSArray *sectionKeys = [rowKeys objectAtIndex:section];
        NSString *row0Key = [sectionKeys objectAtIndex:0];
        if ([[NSString stringWithFormat:@"%@", [managedObject valueForKey:@"type"]]
             isEqualToString:[NSString stringWithFormat:@"One on One"]] && [[managedObject valueForKey:row0Key] count] == 2){
            return [[managedObject valueForKey:row0Key] count];
        }
        return [[managedObject valueForKey:row0Key] count] +1;
    }
    return [rowLabels countOfNestedArray:section];
}

Но если пользователь пытается удалить строку, когда уже есть 2 строки, приложение вылетает из-за одинакового количества строк до и после удаления.

Как мне обойти это и сделать это правильно?

Ответы [ 2 ]

0 голосов
/ 11 августа 2010

Я закончил тем, что сделал это не так, как хотел сначала.

Мое рассуждение состояло в том, что моя текущая реализация дала мне ошибку в отладчике, который в свою очередь вывел приложение из строя. Эта ошибка казалась неизбежной, поэтому я решил просто отключить ячейку, если есть две строки, а не скрывать ее.

Для этого в моем методе tableView:cellForRowAtIndexPath: я добавил следующий код (в моем выражении if), чтобы он выглядел невыбираемым для пользователя:

cell.textLabel.textColor = [UIColor lightGrayColor];
cell.editingAccessoryType = UITableViewCellAccessoryNone;

И в методе tableView:didSelectRowAtIndexPath: я оставил свой оператор if пустым, чтобы он не выдвигал другой контроллер представления и не добавлял объект. Хотя я включил этот код для отмены выбора строки:

[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
0 голосов
/ 11 августа 2010

Во-первых, метод numberOfRows .. не показался бы мне подходящим местом для такой логики.Я бы предпочел создать отдельный метод для определения и возврата текущего игрового режима (и поддерживать игровой режим обновленным всякий раз, когда пользователь выбирает другой режим).Я бы связывал целые числа с игровыми модами (1 = "один на один", 2 = "все против всех" ...), поэтому в методе numberOfRows вам просто нужно проверить "является ли текущий раздел == 1?"&& "В каком режиме игры мы находимся?"чтобы определить, сколько строк необходимо.

Если вы правильно отслеживаете игровой режим, вам больше не нужно проверять наличие одинаковых строк.

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