Первое нажатие на пользовательскую ячейку uitableview должно расширить его, а второе - сократить его. - PullRequest
1 голос
/ 11 мая 2010

В моем приложении есть требование, чтобы первое нажатие на пользовательскую ячейку uitableview с меткой внутри нее расширяло ее, а во-вторых - сокращало ее. Я могу развернуть и сжать ячейку и развернуть ярлык внутри ячейки, но не могу свернуть ярлык при втором нажатии.

Я использую эту функцию

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];
if( selected == YES ) {
    [self expandRow];
}
else {
    [self contractRow];
}

height = [lblFeed frame].size.height + 75;
}

expandRow расширяет метку, а contractRow сокращает ее. Я озадачен тем, сколько строк вызывается этой функцией. Он вызывается не только для подключенной ячейки, он вызывается большее количество раз, поскольку одно нажатие на одну ячейку может быть для других ячеек, но я не получаю, какие строки.

Это действительно срочно.

Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

Нажатие на выбранную строку не приводит к ее отмене. Когда ячейка выделяется, она остается выделенной до тех пор, пока deselectRowAtIndexPath: animated: не будет вызван в ее таблице. Вот почему ваш метод не вызывается для второго касания.

В архитектуре MVC, такой как UIKit, рекомендуется обрабатывать взаимодействия с пользователем в классах контроллера. Было бы целесообразно переопределить - [UITableViewCell setSelected: animated:], если все, что вы делали, это настраивали способ представления представления для выбранной ячейки, но в этом случае ваше поведение переключателя расширения / сжатия потребовало бы изменения в способе выбора UITableView и снимает выделение с его ячеек.

Вы можете создать подкласс UITableView и реализовать это переключающее поведение самостоятельно, или вы можете оставить UITableView в покое и обработать все это на уровне UIViewController, выполнив что-то вроде этого:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([self.expandedIndexPath isEqual:indexPath]) {
        [(YourCustomCell *)[self tableView:tableView cellForRowAtIndexPath:indexPath] contractRow];
        self.expandedIndexPath = nil;
    }
    else {
        if (self.expandedIndexPath) {
            [(YourCustomCell *)[self tableView:tableView cellForRowAtIndexPath:self.expandedIndexPath] contractRow];
        }
        [(YourCustomCell *)[self tableView:tableView cellForRowAtIndexPath:indexPath] expandRow];
        self.expandedIndexPath = indexPath;
    }
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}
0 голосов
/ 11 мая 2010

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

Просто добавьте свое собственное свойство BOOL expanded и посмотрите, как это работает. Вы, вероятно, также должны вызывать его из UITableView delegate методов.

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