2013-07-05 7 views
0

У меня есть вопрос об использовании EGORefreshTableHeaderView:IOS UITableView headerView не скрывался

Если я использую этот код, это нормально:

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view 
{ 
    _reloading = YES; 
    [self performSelector:@selector(refreshData) withObject:nil afterDelay:0.1f]; 
} 

- (void)refreshData 
{ 
    _reloading = NO; 
    [self.dataSourceArr removeAllObjects]; 
    [self.dataSourceArr addNewData]; 
    [self.egoHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.mainTableView]; 
    [self.mainTableView reloadData]; 
} 

Однако, когда я использую этот код , то EGOrefreshHeaderView покажет на mainTableView сверху все вместе, он не скрывает:

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view 
{ 
    _reloading = YES; 
    [self refreshData]; 
} 
- (void)refreshData 
{ 
    _reloading = NO; 
    [self.dataSourceArr removeAllObjects]; 
    [self.dataSourceArr addNewData]; 
    [self.egoHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.mainTableView]; 
    [self.mainTableView reloadData]; 
} 
+0

Не могли бы вы отформатировать код? Ничто не читаемо. –

+0

Прошу прощения, и все в порядке – Harry

+0

Либо проверьте 'self.egoHeaderView', либо' self.mainTableView', если он равен нулю. И если они «IBOutlet», проверьте, правильно ли они подключены к xib. –

ответ

1

верхний бит с ода работает так:

// someone calls egoRefreshTableHeaderDidTriggerRefresh 
    [_delegate egoRefreshTableHeaderDidTriggerRefresh:self] 
     // sets up a refreshData to run after set period of time 
    scrollView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f); // a 
// some time later, refreshData runs 
    [self.egoHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.mainTableView]; 
     [scrollView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)]; // b 

Донные бит работает как это:

// someone calls egoRefreshTableHeaderDidTriggerRefresh 
    [_delegate egoRefreshTableHeaderDidTriggerRefresh:self] 
     [self refreshData]; 
      [self.egoHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.mainTableView]; 
       [scrollView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)]; // b 
    scrollView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f); // a 

линии a и b перепутаны. Несмотря на то, что изменения анимированы, вторая строка переопределяет первую.

Fix 1:

Изменить файл EGORefreshTableHeaderView.h

Изменение - (void)egoRefreshTableHeaderDidTriggerRefresh:... к - (bool)egoRefreshTableHeaderDidTriggerRefresh:...

Изменить файл EGORefreshTableHeaderView.m

Изменить - (void)egoRefreshScrollViewDidEndDragging:

if ([_delegate respondsToSelector:@selector(egoRefreshTableHeaderDidTriggerRefresh:)]) { 
    if([_delegate egoRefreshTableHeaderDidTriggerRefresh:self]) { 
     return; 
    } 
} 

И, наконец, изменить ваш egoRefreshTableHeaderDidTriggerRefresh:

- (bool)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view 
{ 
    _reloading = YES; 
    [self refreshData]; 
    return true; 
} 

Fix 2:

Если вы не хотите, чтобы изменить код третьей стороны, топ-версия является единственным способом. Вы можете указать 0 для продолжительности, и это должно стоять в очереди на селектор, который будет запущен после.

+0

спасибо очень !! это слишком помогает мне – Harry

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