Первое Касание на customcell uitableview должно расшириться, это и второй должно сократить его

В моем приложении у меня есть это требование, которые сначала касаются на пользовательской ячейке 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 сокращает его. Я озадачен что касается того, сколько строк эта функция вызвана. Это не становится названным только для коснувшейся ячейки, это становится названным большим количеством раз для единственного касания на отдельной ячейке, может быть для других ячеек, но я не добираюсь который строки.

Действительно срочный This.

Кто-либо может помочь?

1
задан neha 11 May 2010 в 12:33
поделиться

2 ответа

Нажатие на выбранную строку не отменяет ее выбор. Когда ячейка выбрана, она остается выделенной до тех пор, пока для ее таблицы не будет вызвана функция 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];
}
2
ответ дан 3 September 2019 в 00:40
поделиться

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

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

0
ответ дан 3 September 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: