Подтвердить что ты не робот

UIRefreshControl - Pull To Refresh в iOS 7

Я пытаюсь получить функцию обновления для iOS 7 в своем представлении таблицы. В моем viewDidLoad у меня есть:

refreshControl = [[UIRefreshControl alloc] init];
[self.mytableView setContentOffset:CGPointMake(0, refreshControl.frame.size.height) animated:YES];
[refreshControl beginRefreshing];
[refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];

Затем я запускаю:

-(void)refreshTable {
    [self.mytableView reloadData];
    [refreshControl endRefreshing];
}

В iOS 6 это означало бы, что, когда вы потянете вниз на вид таблицы, он покажет круговую стрелу, которая будет растянута, когда вы потянете, и после того, как она вытянется достаточно далеко, она будет обновляться. Прямо сейчас, я не вижу круговой стрелки. Что мне не хватает?

4b9b3361

Ответ 1

Вам не нужно явно устанавливать фрейм или запускать UIRefreshControl. Если это UITableView или UICollectionView, он должен работать как шарм сам по себе. Однако вам нужно остановить его.

Вот как вы должны выглядеть так:

- (void)viewDidLoad {
    [super viewDidLoad];
    refreshControl = [[UIRefreshControl alloc]init];
    [self.mytableView addSubview:refreshControl];
    [refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
}

В вашей функции refreshTable вам необходимо остановить ее, когда вы закончите обновлять свои данные. Вот как это будет выглядеть:

- (void)refreshTable {
    //TODO: refresh your data
    [refreshControl endRefreshing];
    [self.mytableView reloadData];
}

Обратите внимание, что если вы обновляете свои данные асинхронно, вам необходимо переместить вызовы endRefreshing и reloadData на ваш обработчик завершения.

Ответ 2

Вы забыли прикрепить UIRefreshControl к виду таблицы.

Измените viewDidLoad на

  refreshControl = [[UIRefreshControl alloc]init];
  [refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
  [self setRefreshControl:refreshControl];

P.S. Контроллер вашего представления должен быть подклассом UITableViewController.