2013-08-05 2 views
1

Я использую UITableView для отображения данных. Я помещаю 1 UILabel внутри каждой ячейки. Я хочу скрыть эти UILabel при прокрутке. Я пробовал это, но ничего не произошло.Скрыть UILabel в UITableViewCell при прокрутке

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    homeButton.userInteractionEnabled = NO; 
    HomeCell *cell = [[HomeCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:nil]; 
    cell.timeLeft.hidden = YES; 
} 

Спасибо.

+1

Интересный подход, но сделать что-то исчезает, а скроллинг, кажется, плохая идея , Это может быть очень раздражающим. Если это эксперимент, тогда все в порядке, но я бы настоятельно рекомендовал вам пересмотреть дизайн, если вы хотите создать его в приложении. – allprog

+0

@allprog Спасибо за ваш совет. Я подумаю об этом :) – Jacki

ответ

1

Попробуйте этот. Имейте BOOL isScrolling как частную переменную и реализуйте следующие делегаты scrollview. Надеюсь, это то, что вы хотели.

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{   
    if(!decelerate) 
    { 
     isScrolling = NO; 

     NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows]; 
     [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 
    } 
    else 
    { 
     isScrolling = YES;   
    } 
} 

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    isScrolling = NO; 
    NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows]; 
    [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 
} 


-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    isScrolling = YES; 
    NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows]; 
    [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 

} 

Примечание: Я использовал TextLabel, который поставляется с UITableViewCell по умолчанию, и в cellForRowAtIndexPath: Я делаю это:

if(isScrolling) 
    [cell.textLabel setHidden:YES]; 
else 
    [cell.textLabel setHidden:NO]; 
+0

Большое спасибо. Работайте как шарм ^^ !. – Jacki

+0

Добро пожаловать! – nithinbhaktha

1

Что вы там делаете, создается совершенно новая ячейка, которая никогда и никогда не будет на экране, и скрыть ее ярлык.

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

Вы должны сбросить флаг, когда получите ответчик делегата, сообщив вам, что анимация прокрутки завершена.

+0

Спасибо. Я решил проблему. – Jacki

3

Для этого я бы использовал NSNotification.

В HomeCell классе в awakeFromNib методе сделать ...

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLabel) name:@"ShowLabelsInCells" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideLabel) name:@"HideLabelsInCells" object:nil]; 

Затем создайте методы showLabel и hideLabel.

Тогда в UITableViewController вы можете наблюдать за Scrollview прокрутки (и остановки прокрутки) и позвонить ...

[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowLabelsInCells" object:nil]; 

и ...

[[NSNotificationCenter defaultCenter] postNotificationName:@"HideLabelsInCells" object:nil]; 

Когда вы нуждаетесь в них.

Не требуется итерирование через ячейки.

+0

Как насчет того, когда вам нужно создать новую ячейку во время прокрутки? (Мне нравится идея, хотя для модификации существующих ячеек) – Wain

+1

Кроме того, вы должны вызывать 'removeObserver:' перед тем, как Cell будет освобожден. Приложение, скорее всего, рухнет без него. – allprog

+0

Ну, в любом случае ячейки, оставшиеся в очереди, все равно будут скрыты/скрыты. Переменные сохраняются, когда ячейка удаляется. Возможно, вы могли бы использовать свойство в контроллере, чтобы в 'cellForRowAtIndexPath' вы могли установить его, чтобы быть уверенным. – Fogmeister

Смежные вопросы