Ячейка UITableViewCell не отображается - PullRequest
0 голосов
/ 21 июня 2011

Есть ли какой-либо метод в UITableView для ячейки табличного представления, когда вы перемещаете табличное представление, а ячейки скрываются или удаляются.У меня есть этот код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    int curIndex = 0;

    for (int i = 0; i < [dataHolder.dateArray count]; i++)
    {
        if ([[dataHolder.dateArray objectAtIndex:i] isEqual:[dataHolder.allDates objectAtIndex:[indexPath section]]])
        {
            if ([self indexHasContains:i] == NO)
            {
                curIndex = i;
                [indexHasChossen addObject:[NSString stringWithFormat:@"%i", i]];
                break;
            }
        }
    }

    cell.selectionStyle = UITableViewCellSelectionStyleGray;
    cell.textLabel.text = [NSString stringWithFormat:@"%@, %@", [dataHolder.courseArray objectAtIndex:curIndex], [dataHolder.placeArray objectAtIndex:curIndex]];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [dataHolder.timeArray objectAtIndex:curIndex]];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;
    cell.textLabel.textColor = [UIColor blackColor];
    cell.detailTextLabel.textColor = [UIColor whiteColor];

    return cell;
}

Я также хочу метод, который удаляет из массива indexHasChossen, когда ячейка скрывается / удаляется.Я просмотрел документацию на яблоко и пока ничего не нашел.Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

0 голосов
/ 21 июня 2011

Неважно, как tableView:cellForRowAtIndexPath:, если вы хотите скрыть или удалить ячейки.Табличное представление вызывает этот метод только тогда, когда оно знает, что ячейки существуют.Это зависит от того, что вы возвращаете в методах numberOfSectionsInTableView: и tableView:numberOfRowsInSection:.В большинстве случаев первое возвращает 1, поэтому, если вы хотите исключить целый раздел, у вас должен быть какой-то маркер, например sectionHidden, который является логическим значением, указывающим, является ли раздел скрытым или нет.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if ( sectionHidden ) 
        return 0;
    else
        return 1;
}

и где бы вы ни захотели инициировать действие удаления, сделайте что-то вроде этого,

sectionHidden = YES;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0]
              withRowAnimation:UITableViewRowAnimationFade];

и переверните его на do sectionHidden = NO и позвоните reloadSections:withRowAnimation:.

То жеЭто применимо к строкам, где вам придется изменить метод tableView:numberOfRowsInSection:, чтобы отразить, что вы удалили или скрыли строки.На этот раз вы должны использовать reloadRowsAtIndexPaths:withRowAnimation: вместо reloadSections:withRowAnimation: метода.

0 голосов
/ 21 июня 2011

Удалить ячейки из uitableview очень просто.Я рекомендую взглянуть на проект iPhoneCoreDataRecipes из документации разработчика Apple.

Вам нужно будет добавить функцию commitEditingStyle к вашему UITableViewDelegate и добавить кнопку редактирования (self.editButtonItem в UITableViewController), чтобы разрешить режим редактирования.

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the object for the given index path
    }
}   
0 голосов
/ 21 июня 2011

Хотя стандартной концепции «скрытых» tableViewCells не существует, ячейки, удаленные пользователем, отображаются в tableView: commitEditingStyle: forRowAtIndexPath:

Но позвольте мне также добавить, что вы, похоже, отслеживаете "hasChosen" в cellForRowAtIndexPath. Этот метод означает только то, что ячейка должна появиться на экране, а не то, что она была выбрана. «Выбранный» происходит, когда ваш делегат вызывается с tableView: didSelectRowAtIndexPath:

Редактировать: ах, может быть, под "скрытым", вы имеете в виду, что это ушло за пределы экрана. Нет, я не верю, что есть такой вызов (хотя вы могли бы немного обмануть и посмотреть на любые лишенные ячейки, которые вы получили, так как это те ячейки, которые раньше были на экране и теперь доступны).

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