UIRefreshControl для UIViewController

Опубликовано 2015.01.28

Если использовать табличное представление - то в настройках Storyboard даже есть специальный чекбокс, который включает обновление представления при свайпе вниз. У обычного UIViewController такой опции нет. Но её легко добавить программно: В методе viewDidLoad пропишите:
  1. UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];//инициализация
  2. refreshControl.backgroundColor = [UIColor purpleColor];//добавим фиолетовый фон
  3. refreshControl.tintColor = [UIColor whiteColor];//установим белый шрифт
  4. [refreshControl addTarget:self action:@selector(reloadData:) forControlEvents:UIControlEventValueChanged];//вешаем обработчик reloadData
  5. //тут у меня есть scrollView, который является самым верхним view. У вас он может называться по-другому
  6. [scrollView addSubview:refreshControl];
  7. [self.view addSubview:scrollView];
Теперь создадим обработчик:
  1. - (void)reloadData:(UIRefreshControl *)refreshControl{
  2. NSLog(@"reloading...");
  3. //тут обновляйте ваши переменные, которые будут использоваться для наполнения представления(текст, фото и т.д.)
  4. if (refreshControl) {
  5. //делаем красивое пояснение
  6. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  7. [formatter setDateFormat:@"d.MM в HH:mm"];//формат даты
  8. NSString *title = [NSString stringWithFormat:@"Обновлено: %@", [formatter stringFromDate:[NSDate date]]];
  9. NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:[UIColor whiteColor]
  10. forKey:NSForegroundColorAttributeName];
  11. NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title attributes:attrsDictionary];
  12. refreshControl.attributedTitle = attributedTitle;
  13. [refreshControl endRefreshing];
  14. }
  15. //тут всё обновляем
  16. [self viewDidLayoutSubviews];
  17. [self viewDidLoad];
  18. NSLog(@"reloading done");
  19. }
Всё готово.