Добавить элементы редактирования в UITableViewCell - PullRequest
1 голос
/ 06 апреля 2011

У меня есть несколько строк в табличном представлении, которые я люблю редактировать.

Я думал, что метод setEditing даст мне кнопку "Редактировать и удалить", но он показывает толькоКнопка Удалить.Поскольку у меня нет контроллера подробного представления, который будет помещен в didSelectRowAtIndexPath, я подумал, что смогу показать пару элементов редактирования в выбранной ячейке.

Мне нужно добавить три кнопки, чтобы указать приоритет для назначений:Низкий, Высокий и Средний приоритет.Это означает, что мне нужно изменить высоту выбранной ячейки, чтобы освободить место для этих кнопок, я думаю, это довольно легко сделать.

Что мне интересно, так это правильный путь?

Сегодня я провел довольно много исследований, не найдя примеров того, как другие решили редактирование в UITableViewCell.Если вы отредактируете контакт в приложении «Контакты» на iPhone, UITableViewCells изменится, чтобы включить быстрое и простое редактирование, вот что я ищу.

Так что у вас есть советы для меня по этому вопросу?

Редактировать # 1

Мой код в didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    Cell *selectedCell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];

    UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(0, 0, 50, 100);
    btn.titleLabel.text = @"Set this item to High Priority";
    btn.backgroundColor = [UIColor greenColor];
    [selectedCell.contentView addSubview: btn];

    self.editing = YES;

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject: indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

Код для heightForRowAtIndexPath:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    Cell *cell = nil;
    if (self.editing)
        cell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];
    else
        cell = nil;

    BOOL expandCell = NO;
    NSInteger expandationHeight = 0;

    if (cell != nil)
    {
        for (UIButton *btn in cell.contentView.subviews)
        {
            NSLog(@"A button was found.");
            expandationHeight = 70;
            expandCell = YES;
        }       
    }

    return expandationHeight + heightOfOtherElements;
}

Когда я нажимаю на ячейку, ничего не происходитно все становится отключенным, я не могу щелкнуть никакие элементы в виде отверстия.Это как-то связано с [tableView cellForRowAtIndexPath: indexPath], потому что, если я раскомментирую эту строку, пользовательский интерфейс не станет отключенным.

Что я делаю неправильно?

1 Ответ

1 голос
/ 06 апреля 2011

Это не слишком сложно, хотя для этого нужно кое-что.

Вы хотите изменить содержимое одной или всех ячеек?

Чтобы указать конкретную высоту для одной ячейки, используйте метод делегата - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath.

Он вызывается для каждой ячейки каждый раз, когда отображается табличное представление. Если вы хотите изменить одну строку, вызовите метод reloadRowsAtIndexPaths:withRowAnimation: из UITableView. Если вы хотите обновить все ячейки, просто используйте метод - (void)reloadData.

Вы также можете получить доступ к определенной ячейке, используя метод - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath из UITableView. Затем вы можете перенастроить его так, чтобы добавить к нему различные элементы.

Таким образом, когда ячейка выбрана, проверьте, нужно ли ее редактировать, тогда:

  • обновить ячейку, полученную из cellForRowAtIndexPath
  • убедитесь, что ваш метод tableView: heightForRowAtIndexPath: вернет правильную высоту
  • сообщить табличному представлению обновить представление, используя reloadRowsAtIndexPaths: withRowAnimation:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...