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 это означало бы, что, когда вы потянете вниз на вид таблицы, он покажет круговую стрелу, которая будет растянута, когда вы потянете, и после того, как она вытянется достаточно далеко, она будет обновляться. Прямо сейчас, я не вижу круговой стрелки. Что мне не хватает?
Ответы
Ответ 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
.