Як використовувати функцію pull для оновлення в Swift?


248

Я будую RSS-зчитувач за допомогою швидкого і потрібно реалізувати функцію "тягнути" для перезавантаження.

Ось як я намагаюся це зробити.

class FirstViewController: UIViewController,
    UITableViewDelegate, UITableViewDataSource {

   @IBOutlet var refresh: UIScreenEdgePanGestureRecognizer
   @IBOutlet var newsCollect: UITableView

   var activityIndicator:UIActivityIndicatorView? = nil

   override func viewDidLoad() {
       super.viewDidLoad()
       self.newsCollect.scrollEnabled = true
      // Do any additional setup after loading the view, typically from a nib.

      if nCollect.news.count <= 2{
          self.collectNews()
       }
      else{
          self.removeActivityIndicator()
       }
      view.addGestureRecognizer(refresh)
   }



@IBAction func reload(sender: UIScreenEdgePanGestureRecognizer) {
    nCollect.news = News[]()
    return newsCollect.reloadData()
}

Я отримую:

Властивість "self.refresh" не ініціалізується при виклику super.init

Будь ласка, допоможіть мені зрозуміти поведінку розпізнавачів жестів. Робочий зразок коду буде чудовою підмогою.

Дякую.


Ви хочете оновити в настільному перегляді щось таке, як techrepublic.com/blog/software-engineer/…
Anil Varghese

Так, мені потрібен лише цей функціонал, але я не маю поняття ObjC. Хочете реалізувати швидко.
xrage

Відповіді:


591

Потягніть для оновлення вбудований в iOS. Ви могли це зробити швидко

var refreshControl = UIRefreshControl()

override func viewDidLoad() {
   super.viewDidLoad()

   refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
   refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
   tableView.addSubview(refreshControl) // not required when using UITableViewController
}

@objc func refresh(_ sender: AnyObject) {
   // Code to refresh table view  
}

У якийсь момент ви можете закінчити освіжати.

refreshControl.endRefreshing()

15
Дякую! Я цим користувався. Просто трохи налаштування, для ледачого завантаження. Я б зробив: "lazy var refreshControl = UIRefreshControl ()" Я вважаю гарною практикою уникати примусового розгортання змінних, оскільки, здається, це посягає на безпеку мови.
nmdias

10
Просто швидка примітка, вам не потрібно навіть додавати refreshControl до перегляду таблиці. Це обробляється неявно.
Кендрік Ледет

1
@KendrickLedet, навіть якщо ви не використовуєте UITableViewController?
Ван Дю Тран

3
Як я міг би використовувати це рішення вгорі таблиці та внизу?
AustinT

3
Swift 4 update: refreshControl.addTarget (самодіяльність, дія: "refresh:", for: .valueChanged)
akseli

148

Рішення з табло та швидким ...

1.) Відкрийте файл .storyboard, виберіть TableViewController на вашій дошці та "Включити" контролер перегляду таблиць - оновлення в утилітах.

введіть тут опис зображення

2.) Відкрийте пов'язаний клас UITableViewController і додайте наступний рядок у метод viewDidLoad.

self.refreshControl?.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)

Відредаговано для Swift 5.0:

self.refreshControl?.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)

АБО у Swift 2.2:

self.refreshControl?.addTarget(self, action: #selector(TestTableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)

3.) Додайте наступний метод над методом viewDidLoad

func refresh(sender:AnyObject)
{
    // Updating your data here...

    self.tableView.reloadData()
    self.refreshControl?.endRefreshing()
}

7
Крім того, ви можете додати дію оновлення за допомогою розкадрівки, перетягнувши її з керування "Refresh Control" у дошці
зображень

Якщо мої дані завантаження асинхронні, чи повинен я put self.tableView.reloadData()і self.refreshControl?.endRefreshing()в зворотному дзвінку?
Qian Chen

Саме так! І поставте reloadData()головну чергу, щоб миттєво оновити інтерфейс користувача: dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
Порожнє

1
Цей спосіб віддав перевагу над прийнятою відповіддю з тієї причини, що тоді немає помилок у макеті (принаймні для мене, використовуючи швидкий 2+)
Ryan Walton

1
Ця відповідь повинна мати найбільше голосів і бути правильною відповіддю
krummens

75

Я хотів би згадати функцію PRETTY COOL , яка включена з iOS 10, а саме:

На даний момент UIRefreshControl безпосередньо підтримується в кожному з UICollectionView, UITableViewі UIScrollView!

Кожен з цих представлень має властивість екземпляра refreshControl , а це означає, що більше немає необхідності додавати його як підпогляд у своєму поданні прокрутки , все, що вам потрібно зробити:

@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()

    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: #selector(doSomething), for: .valueChanged)

    // this is the replacement of implementing: "collectionView.addSubview(refreshControl)"
    collectionView.refreshControl = refreshControl
}

func doSomething(refreshControl: UIRefreshControl) {
    print("Hello World!")

    // somewhere in your code you might need to call:
    refreshControl.endRefreshing()
}

Особисто я вважаю більш природним розглядати його як властивість для перегляду прокрутки, ніж додавати його як підпогляд, тим більше, що єдиний відповідний вигляд, який є наглядом для UIRefreshControl, - це прокрутка, тобто функціональність використання UIRefreshControl є лише корисна при роботі з видом прокрутки; Ось чому цей підхід повинен бути більш очевидним для налаштування подання контролю оновлення.

Однак у вас все ще є можливість використовувати на addSubviewоснові версії iOS:

if #available(iOS 10.0, *) {
  collectionView.refreshControl = refreshControl
} else {
  collectionView.addSubview(refreshControl)
}

Ей, чоловіче, що я називаю в doSomething func? якщо я закликаю reload.Data він не хоче завантажуватися знову!

@JavierV. додайте точку перерви у doSomethingфункції, якщо вона доступна, то вам доведеться перевірити свій код.
Ахмад Ф

50

Швидкий 4

var refreshControl: UIRefreshControl!

override func viewDidLoad() {
    super.viewDidLoad()

    refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
    tableView.addSubview(refreshControl) 
}

@objc func refresh(_ sender: Any) {
    //  your code to reload tableView
}

І ви можете перестати освіжатись:

refreshControl.endRefreshing()

Не забудьте згадати tableView.reloadData()у своєму прикладі!
Константинос Націос

Привіт Я створюю мій refreshcontrol цим способом: var refControl: UIRefreshControl{ let rfControl = UIRefreshControl() rfControl.attributedTitle = NSAttributedString(string: "") rfControl.tintColor = UIColor(red:0.16, green:0.68, blue:0.9, alpha:1) rfControl.addTarget(self, action: #selector(getNewMessageList), for: .valueChanged) return rfControl }. Тоді зателефонуйте endRefreshing (), це не спрацює (refreshcontrol все ще відображається там), але слідкуйте за своїм способом, він спрацював, будь ласка, дайте мені знати, чому?
lee

@lee Оскільки rfControl локальний і не має доступу ззовні. Спробуйте ініціалізувати rfControl як глобальну змінну для VC: var rfControl = UIRefreshControl (), і зупиніться на rfControl.endRefreshing ()
Gilad Brunfman

Питання: де .valueChangedзапускається подія? Я не розумію цього зв’язку.
juniorgarcia

коли спрацьовує UIRefreshControl, як ви бачите, коли ви додаєтеTarget: refreshControl.addTarget (self, action: #selector (self.refresh), for: UIControlEvents.valueChanged)
Gilad Brunfman

9

У Swift використовуйте це,

Якщо ви хочете оновити в WebView,

Тому спробуйте цей код:

override func viewDidLoad() {
    super.viewDidLoad()
    addPullToRefreshToWebView()
}

func addPullToRefreshToWebView(){
    var refreshController:UIRefreshControl = UIRefreshControl()

    refreshController.bounds = CGRectMake(0, 50, refreshController.bounds.size.width, refreshController.bounds.size.height) // Change position of refresh view
    refreshController.addTarget(self, action: Selector("refreshWebView:"), forControlEvents: UIControlEvents.ValueChanged)
    refreshController.attributedTitle = NSAttributedString(string: "Pull down to refresh...")
    YourWebView.scrollView.addSubview(refreshController)

}

func refreshWebView(refresh:UIRefreshControl){
    YourWebView.reload()
    refresh.endRefreshing()
}

Дякую вам сер! Вирішив проблему нооба, з якою я стикався під час навчання.
Адріан Девід Сміт

5

Відповідь Анхіла мені дуже допомогла.

Однак, експериментуючи далі, я помітив, що запропоноване рішення іноді спричиняє не надто сильну помилку інтерфейсу .

Натомість, ідучи за таким підходом *, зробили для мене трюк.

* Швидкий 2.1

//Create an instance of a UITableViewController. This will host your UITableView.
private let tableViewController = UITableViewController()

//Add tableViewController as a childViewController and set its tableView property to your UITableView.
self.addChildViewController(self.tableViewController)
self.tableViewController.tableView = self.tableView
self.refreshControl.addTarget(self, action: "refreshData:", forControlEvents: .ValueChanged)
self.tableViewController.refreshControl = self.refreshControl

2

Те, що повідомляє про помилку, це те, що refreshвона не ініціалізується. Зверніть увагу , що ви вирішили зробити refreshне обов'язково, що в Swift означає , що він має мати значення перед викликом super.init(або це неявно називається, який , здається, ваш випадок). Або зробіть refreshнеобов’язковий (можливо, те, що ви хочете), або ініціалізуйте його якимось чином.

Я б запропонував прочитати вступну документацію Swift ще раз, яка висвітлює це дуже довго.

Останнє, що не є частиною відповіді, як вказував @Anil, є вбудований модуль для оновлення контролю в iOS UIRefresControl, що називається , і це може бути щось, що варто заглянути .


2

Я створив додаток для каналу RSS, в якому у мене є функція Pull To refresh, яка спочатку мала деякі з перелічених вище проблем.

Але, щоб додати відповіді користувачів вище, я шукав всюди свій випадок використання і не міг його знайти. Я завантажував дані з Інтернету (RSSFeed) і хотів перенести на свій стілВигляд історій, щоб оновити.

Згадане вище стосується правильних областей, але з деякими проблемами, які виникають у людей, ось що я зробив, і це спрацює:

Я взяв підхід до @Blankarsch і перейшов до моєї main.storyboard і виберіть подання таблиці, щоб використовувати оновлення, тоді те, що не згадувалося, - це створити IBOutlet та IBAction для ефективного використання оновлення.

//Created from main.storyboard cntrl+drag refresh from left scene to assistant editor
@IBOutlet weak var refreshButton: UIRefreshControl

override func viewDidLoad() {
  ...... 
  ......
  //Include your code
  ......
  ......
  //Is the function called below, make sure to put this in your viewDidLoad 
  //method or not data will be visible when running the app
  getFeedData()
}

//Function the gets my data/parse my data from the web (if you havnt already put this in a similar function)
//remembering it returns nothing, hence return type is "-> Void"
func getFeedData() -> Void{
  .....
  .....
}

//From main.storyboard cntrl+drag to assistant editor and this time create an action instead of outlet and 
//make sure arguments are set to none and note sender
@IBAction func refresh() {
  //getting our data by calling the function which gets our data/parse our data
  getFeedData()

  //note: refreshControl doesnt need to be declared it is already initailized. Got to love xcode
  refreshControl?.endRefreshing()
}

Сподіваюсь, це допоможе кожному, хто опинився в такій же ситуації, як я


2
func pullToRefresh(){

    let refresh = UIRefreshControl()
    refresh.addTarget(self, action: #selector(handleTopRefresh(_:)), for: .valueChanged )
    refresh.tintColor = UIColor.appBlack
    self.tblAddressBook.addSubview(refresh)

}
@objc func handleTopRefresh(_ sender:UIRefreshControl){
    self.callAddressBookListApi(isLoaderRequired: false)
    sender.endRefreshing()
}

2

Деталі

  • Версія Xcode 10.3 (10G8), Swift 5

Особливості

  • Можливість програмувати «тягнути до оновлення»
  • Захист від подій "потягніть для оновлення"
  • Можливість продовження анімації індикатора активності при переключенні контролера перегляду (наприклад, у випадку TabController)

Рішення

import UIKit

class RefreshControl: UIRefreshControl {

    private weak var actionTarget: AnyObject?
    private var actionSelector: Selector?
    override init() { super.init() }

    convenience init(actionTarget: AnyObject?, actionSelector: Selector) {
        self.init()
        self.actionTarget = actionTarget
        self.actionSelector = actionSelector
        addTarget()
    }

    private func addTarget() {
        guard let actionTarget = actionTarget, let actionSelector = actionSelector else { return }
        addTarget(actionTarget, action: actionSelector, for: .valueChanged)
    }

    required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }

    func endRefreshing(deadline: DispatchTime? = nil) {
        guard let deadline = deadline else { endRefreshing(); return }
        DispatchQueue.global(qos: .default).asyncAfter(deadline: deadline) { [weak self] in
            DispatchQueue.main.async { self?.endRefreshing() }
        }
    }

    func refreshActivityIndicatorView() {
        guard let selector = actionSelector else { return }
        let _isRefreshing = isRefreshing
        removeTarget(actionTarget, action: selector, for: .valueChanged)
        endRefreshing()
        if _isRefreshing { beginRefreshing() }
        addTarget()
    }

    func generateRefreshEvent() {
        beginRefreshing()
        sendActions(for: .valueChanged)
    }
}

public extension UIScrollView {

    private var _refreshControl: RefreshControl? { return refreshControl as? RefreshControl }

    func addRefreshControll(actionTarget: AnyObject?, action: Selector, replaceIfExist: Bool = false) {
        if !replaceIfExist && refreshControl != nil { return }
        refreshControl = RefreshControl(actionTarget: actionTarget, actionSelector: action)
    }

    func scrollToTopAndShowRunningRefreshControl(changeContentOffsetWithAnimation: Bool = false) {
        _refreshControl?.refreshActivityIndicatorView()
        guard   let refreshControl = refreshControl,
                contentOffset.y != -refreshControl.frame.height else { return }
        setContentOffset(CGPoint(x: 0, y: -refreshControl.frame.height), animated: changeContentOffsetWithAnimation)
    }

    private var canStartRefreshing: Bool {
        guard let refreshControl = refreshControl, !refreshControl.isRefreshing else { return false }
        return true
    }

    func startRefreshing() {
        guard canStartRefreshing else { return }
        _refreshControl?.generateRefreshEvent()
    }

    func pullAndRefresh() {
        guard canStartRefreshing else { return }
        scrollToTopAndShowRunningRefreshControl(changeContentOffsetWithAnimation: true)
        _refreshControl?.generateRefreshEvent()
    }

    func endRefreshing(deadline: DispatchTime? = nil) { _refreshControl?.endRefreshing(deadline: deadline) }
}

Використання

// Add refresh control to UICollectionView / UITableView / UIScrollView
private func setupTableView() {
    let tableView = UITableView()
    // ...
    tableView.addRefreshControll(actionTarget: self, action: #selector(refreshData))
}

@objc func refreshData(_ refreshControl: UIRefreshControl) {
    tableView?.endRefreshing(deadline: .now() + .seconds(3))
}

// Stop refreshing in UICollectionView / UITableView / UIScrollView
tableView.endRefreshing()

// Simulate pull to refresh in UICollectionView / UITableView / UIScrollView
tableView.pullAndRefresh()

Повний зразок

Не забудьте додати сюди код рішення

import UIKit

class ViewController: UIViewController {

    private weak var tableView: UITableView?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupTableView()
    }

    private func setupTableView() {
        let tableView = UITableView()
        view.addSubview(tableView)
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        tableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        tableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        tableView.dataSource = self
        tableView.delegate = self
        tableView.addRefreshControll(actionTarget: self, action: #selector(refreshData))
        self.tableView = tableView
    }
}

extension ViewController {
    @objc func refreshData(_ refreshControl: UIRefreshControl) {
        print("refreshing")
        tableView?.endRefreshing(deadline: .now() + .seconds(3))
    }
}

extension ViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int { return 1 }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 20 }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.text = "\(indexPath)"
        return cell
    }
}

extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.pullAndRefresh()
    }
}

2

Швидкий 5

private var pullControl = UIRefreshControl()

pullControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
        pullControl.addTarget(self, action: #selector(refreshListData(_:)), for: .valueChanged)
        if #available(iOS 10.0, *) {
            tableView.refreshControl = pullControl
        } else {
            tableView.addSubview(pullControl)
        }
// Actions
@objc private func refreshListData(_ sender: Any) {
        self.pullControl.endRefreshing() // You can stop after API Call
        // Call API
    }

1

Я пропоную зробити розширення pull To Refresh для використання в кожному класі.

1) Створіть порожній швидкий файл: Файл - Новий - Файл - Швидкий файл.

2) Додайте наступне

    //  AppExtensions.swift

    import Foundation
    import UIKit    

    var tableRefreshControl:UIRefreshControl = UIRefreshControl()    

    //MARK:- VIEWCONTROLLER EXTENSION METHODS
    public extension UIViewController
    {
        func makePullToRefreshToTableView(tableName: UITableView,triggerToMethodName: String){

            tableRefreshControl.attributedTitle = NSAttributedString(string: "TEST: Pull to refresh")
            tableRefreshControl.backgroundColor = UIColor.whiteColor()
            tableRefreshControl.addTarget(self, action: Selector(triggerToMethodName), forControlEvents: UIControlEvents.ValueChanged)
            tableName.addSubview(tableRefreshControl)
        }
        func makePullToRefreshEndRefreshing (tableName: String)
        {
            tableRefreshControl.endRefreshing()
//additional codes

        }
    }    

3) У своєму контролері перегляду викличте такі методи як:

  override func viewWillAppear(animated: Bool) {

self.makePullToRefreshToTableView(bidderListTable, triggerToMethodName: "pullToRefreshBidderTable")
}

4) У якийсь момент ви хотіли закінчити освіжати:

  func pullToRefreshBidderTable() {
self.makePullToRefreshEndRefreshing("bidderListTable")    
//Code What to do here.
}
OR    
self.makePullToRefreshEndRefreshing("bidderListTable")

1
Ваш код із назвою проекту та повідомленням про авторські права, можливо, вам не підходить :). Який би код ви не розмістили тут, він повинен бути безкоштовним для всіх
Anil Varghese

Дякую Анілу! Я забув їх видалити.
AG

1

Для поновлення оновлення я використовую

DGElasticPullToRefresh

https://github.com/gontovnik/DGElasticPullToRefresh

Установка

pod "DGElasticPullToRefresh"

import DGElasticPullToRefresh

і помістіть цю функцію у свій швидкий файл та зателефонуйте цій функції зі свого

замінити функцію переглядуWillAppear (_ анімований: Bool)

     func Refresher() {
      let loadingView = DGElasticPullToRefreshLoadingViewCircle()
      loadingView.tintColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
      self.table.dg_addPullToRefreshWithActionHandler({ [weak self] () -> Void in

          //Completion block you can perfrom your code here.

           print("Stack Overflow")

           self?.table.dg_stopLoading()
           }, loadingView: loadingView)
      self.table.dg_setPullToRefreshFillColor(UIColor(red: 255.0/255.0, green: 57.0/255.0, blue: 66.0/255.0, alpha: 1))
      self.table.dg_setPullToRefreshBackgroundColor(self.table.backgroundColor!)
 }

І не забудьте видалити посилання, поки подання зникне

щоб видалити тягнути для оновлення, введіть цей код у свій

перекрити функцію переглядуDidDisappear (_ анімований: Bool)

override func viewDidDisappear(_ animated: Bool) {
      table.dg_removePullToRefresh()

 }

І це буде схоже

введіть тут опис зображення

Щасливе кодування :)


1

Ви можете досягти цього, використовуючи кілька рядків коду. То чому ви збираєтеся застрягти в сторонній бібліотеці чи інтерфейсі користувача. Потягніть для оновлення вбудований в iOS. Ви могли це зробити швидко

введіть тут опис зображення

var pullControl = UIRefreshControl()

override func viewDidLoad() {
   super.viewDidLoad()

   pullControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
   pullControl.addTarget(self, action: #selector(pulledRefreshControl(_:)), for: UIControl.Event.valueChanged)
   tableView.addSubview(pullControl) // not required when using UITableViewController
}

@objc func pulledRefreshControl(sender:AnyObject) {
   // Code to refresh table view  
}

0

ви можете використовувати цей підклас tableView:

import UIKit

protocol PullToRefreshTableViewDelegate : class {
    func tableViewDidStartRefreshing(tableView: PullToRefreshTableView)
}

class PullToRefreshTableView: UITableView {

    @IBOutlet weak var pullToRefreshDelegate: AnyObject?
    private var refreshControl: UIRefreshControl!
    private var isFirstLoad = true

    override func willMoveToSuperview(newSuperview: UIView?) {
        super.willMoveToSuperview(newSuperview)

        if (isFirstLoad) {
            addRefreshControl()
            isFirstLoad = false
        }
    }

    private func addRefreshControl() {
        refreshControl = UIRefreshControl()
        refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
        refreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged)
        self.addSubview(refreshControl)
    }

    @objc private func refresh() {
       (pullToRefreshDelegate as? PullToRefreshTableViewDelegate)?.tableViewDidStartRefreshing(self)
    }

    func endRefreshing() {
        refreshControl.endRefreshing()
    }

}

1 - в програмі інтерфейсів змінюють клас вашого tableView PullToRefreshTableViewабо створюють PullToRefreshTableViewпрограмно

2 - PullToRefreshTableViewDelegateреалізуйте контролер у вашому поданні

3 - tableViewDidStartRefreshing(tableView: PullToRefreshTableView) буде викликано у вашому контролері перегляду, коли подання таблиці почне оновитись

4 - дзвінок, yourTableView.endRefreshing()щоб закінчити оновлення


0

Ось так я змусив це працювати за допомогою Xcode 7.2, що, на мою думку, є головною помилкою. Я використовую його UITableViewControllerвсередині свогоviewWillAppear

refreshControl = UIRefreshControl()
refreshControl!.addTarget(self, action: "configureMessages", forControlEvents: .ValueChanged)
refreshControl!.beginRefreshing()

configureMessages()

func configureMessages() {
    // configuring messages logic here

    self.refreshControl!.endRefreshing()
}

Як бачите, мені буквально доведеться викликати configureMessage()метод після налаштування мого UIRefreshControlпотім, після цього наступні оновлення спрацюють чудово.


-1

Відповіді інших є правильними, але для більш детальної перевірки цю публікацію Потягніть, щоб оновити

Увімкнути оновлення в дошці розповідей

Коли ви працюєте з UITableViewController, рішення досить просте: По-перше, виберіть контролер подання таблиці у вашій дошці повідомлень, відкрийте інспектор атрибутів та увімкніть оновлення:

UITableViewController оснащений посиланням на UIRefreshControl поза коробкою. Вам просто потрібно підключити декілька речей, щоб ініціювати та завершити оновлення, коли користувач відхилиться.

Перезапис переглядуDidLoad ()

У вашому перегляді viewDidLoad () додайте ціль, щоб обробити оновлення, наступним чином:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
        
    self.refreshControl?.addTarget(self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged)
}
  1. Оскільки я вказав “handleRefresh:” (зверніть увагу на двокрапку!) Як аргумент дії, мені потрібно визначити функцію в цьому класі UITableViewController з тим самим іменем. Крім того, функція повинна брати один аргумент
  2. Ми хотіли б, щоб ця дія викликалася для UIControlEvent під назвою ValueChanged
  3. Не забудьте зателефонувати refreshControl.endRefreshing()

Для отримання додаткової інформації, будь ласка, перейдіть на згадку про Посилання, і вся кредитна допомога на цю посаду


Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Тунакі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.