Потяните, чтобы обновить UITableView без UITableViewController

Я пытаюсь реализовать функцию обновления для обновления в UITableView в UIViewController. Я не могу использовать UITableViewController, потому что я хочу, чтобы UITableView был меньшим subview в controllerе представления, с некоторыми другими элементами над ним. Я предполагаю, что это возможно, но кто-нибудь видел его реализацию?

Добавьте элемент управления обновлением непосредственно в UITableView без использования UITableViewController :

 override func viewDidLoad() { super.viewDidLoad() let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged) if #available(iOS 10.0, *) { tableView.refreshControl = refreshControl } else { tableView.backgroundView = refreshControl } } @objc func refresh(_ refreshControl: UIRefreshControl) { // Do your job, when done: refreshControl.endRefreshing() } 

objective-C :

Вот как вы можете реализовать pull для обновления для представления таблицы. То же, что и в случае просмотра коллекции. Просто замените табличный вид alloc на представление коллекции.

 UITableView *tableViewDemo = [[UITableView alloc]init]; tableViewDemo.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); tableViewDemo.dataSource = self; tableViewDemo.delegate = self; [self.view addSubView: tableViewDemo]; UIRefreshControl *refreshController = [[UIRefreshControl alloc] init]; [refreshController addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged]; [tableViewDemo addSubview:refreshController]; #pragma mark - Handle Refresh Method -(void)handleRefresh : (id)sender { NSLog (@"Pull To Refresh Method Called"); [refreshController endRefreshing]; } 

Это решение от @berik отлично работает, но UIController отображается поверх UITableViewController. Способ исправить это делает это изменение:

 override func viewDidLoad() { let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged) tableView.backgroundView = refreshControl // <- THIS!!! } func refresh(refreshControl: UIRefreshControl) { // Do your job, when done: refreshControl.endRefreshing() } 

Я внедрил EGORefreshTableHeaderView с UIViewController и простым представлением таблицы, трюк в том, что a в местах, где EGO принимает представление прокрутки в качестве параметра, если вы посмотрите, что представление таблицы само по себе наследуется из вида прокрутки.

Это требует только этого и нескольких дополнительных подключений 🙂

Надеюсь это поможет.

Кажется, что если вы создаете UIRefreshControl внутри метода loadView viewController, все работает отлично. UIRefreshControl ведет себя так, как должен. Протестировано с iOS 7.1 и iOS 8.2

Я закончил использование ODRefreshControl . Это не требует взлома, как указано выше tableView.backgroundView = refreshControl , работает почти так же, и дает более tableView.backgroundView = refreshControl интерфейс.

  • Остановить UIWebView от «подпрыгивания» по вертикали?
  • Как установить плагин Xcode для автоматического форматирования кода
  • Собственное использование приложения делегата приложения iPhone
  • Изменение позиции UIBarButtonItem в UINavigationBar
  • Пользовательский интерфейс UINavigationBar
  • XCode 4 зависает при «Присоединении к (имя приложения)»
  • Можете ли вы настраивать анимацию для встраиваемых ячеек UITableView?
  • Как распознать салфетки во всех четырех направлениях?
  • Перемещение фигуры Stick, опорных точек, анимации или чего-то еще ...?
  • Обнаружение iPhone / iPod Touch
  • Пользовательские цвета в UITabBar
  • Давайте будем гением компьютера.