プルを使用してSwiftでリフレッシュする方法は?


247

私はSwiftを使用して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 2014年

回答:


590

プルトゥリフレッシュは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 2014年

10
簡単に言うと、テーブルビューにrefreshControlを追加する必要すらありません。これは暗黙的に処理されます。
Kendrick Ledet 2014

1
UITableViewControllerを使用していなくても@KendrickLedet
Van Du Tran

3
テーブルビューの上部と下部でこのソリューションをどのように使用できますか?
AustinT 2015

3
Swift 4の更新:refreshControl.addTarget(self、action: "refresh:"、for:.valueChanged)
akseli

148

ストーリーボードと迅速なソリューション...

1.).storyboardファイルを開き、ストーリーボードでTableViewControllerを選択し、ユーティリティのTable View Controller-Refreshing機能を「有効」にします。

ここに画像の説明を入力してください

2.)関連するUITableViewController-Classを開き、次の行をviewDidLoad-Methodに追加します。

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-Methodの上に次のメソッドを追加します

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

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

7
また、ストーリーボードの更新コントロールからViewControllerにコントロールをドラッグして、ストーリーボードの更新アクションを追加することもできます
uiureo

私のデータのロードが非同期である場合には、Iべきput self.tableView.reloadData()self.refreshControl?.endRefreshing()コールバックで?
Qian Chen、

丁度!そして置くreloadData()即座にあなたのUIを更新するには、メインキューに: dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
ブランク

1
この方法は、(2+少なくとも私は迅速を使用するため)、その後何のレイアウトのバグが存在しないことの理由で受け入れ答えより好まれました
ライアン・ウォルトン

1
この回答は投票数が最も多く、正解である必要があります
krummens

75

私が言及したいと思いますPRETTY COOLのあるiOSの10、以来含まれている機能は:

現時点では、UIRefreshControlUICollectionViewUITableViewおよびのそれぞれで直接サポートされています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を使用する機能は、スクロールビューを操作するときに便利です。リフレッシュコントロールビューを設定するために、このアプローチがより明確になるのはそのためです。

ただし、addSubviewiOSバージョンに基づいて使用するオプションはまだあります。

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

やあ男、doSomething funcで何と呼んでいますか?reload.Dataを呼び出した場合、再度ロードする必要はありません。

@JavierV。doSomething関数にブレークポイントを追加します。到達可能な場合は、コードを確認する必要があります。
Ahmad F

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()あなたの例で言及することを忘れないでください!
Konstantinos Natsios 2017年

こんにちは、その方法でリフレッシュコントロールを作成します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はまだ表示されます)。
2017年

@lee rfControlはローカルであり、外部からアクセスできないためです。VCのグローバル変数としてrfControlを初期化してみてください:var rfControl = UIRefreshControl()、rfControl.endRefreshing()で停止
Gilad Brunfman

質問:.valueChangedイベントはどこでトリガーされますか?このつながりがわかりません。
ジュニアガルシア2017

UIRefreshControlがトリガされたとき、あなたが見るように、あなたがaddTargetとき:refreshControl.addTarget(自己、アクション:、のため#selector(self.refresh):UIControlEvents.valueChanged)
ギラッドBrunfman

9

スウィフト、これを使用します

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()
}

ありがとうございます!学習中に発生していたnoobの問題を解決しました。
エイドリアンデビッドスミス

5

アンヒルの答えは私を大いに助けました。

しかし、さらに実験を重ねたところ、提案されたソリューションによってUIにそれほど問題が発生することがあります

代わりに、このアプローチを採用することが *私にとってはトリックでした。

* Swift 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によって指摘されたように、答えの一部ではない最後の1つは、iOSに組み込まれている更新を制御するための組み込みのプルUIRefresControlがあり、これは調べる価値があるかもしれません。


2

最初に上記の問題のいくつかを抱えていたプルツー更新機能を備えたRSSフィードアプリを作成しました。

しかし、上記のユーザーの回答に追加するために、私はどこでも私のユースケースを探していて、それを見つけることができませんでした。Web(RSSFeed)からデータをダウンロードしていて、更新するストーリーのtableViewをプルダウンしたいと思いました。

上記の説明は適切な領域をカバーしていますが、人々が抱えているいくつかの問題について、ここで私がやったこととそれがおやつを動かしています:

@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

すべてのクラスで使用するために、プルトゥリフレッシュの拡張を作成することをお勧めします。

1)空のSwiftファイルを作成します:ファイル-新規-ファイル-Swiftファイル。

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)View Controllerで、これらのメソッドを次のように呼び出します:

  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

取り付け

ポッド「DGElasticPullToRefresh」

import DGElasticPullToRefresh

この関数をswiftファイルに入れ、この関数をあなたから呼び出します

func viewWillAppear(_ animated: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!)
 }

そして、ビューが消える間、参照を削除することを忘れないでください

プルを削除して更新するには、このコードを

func viewDidDisappear(_ animated:Bool)をオーバーライドします

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

 }

そしてそれは次のようになります

ここに画像の説明を入力してください

ハッピーコーディング:)


1

これは、数行のコードを使用して実現できます。それでは、なぜサードパーティのライブラリまたはUIを使用するのでしょうか。プルトゥリフレッシュは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への参照が装備されています。ユーザーがプルダウンしたときに更新を開始して完了するには、いくつかのことを接続するだけです。

viewDidLoad()をオーバーライドする

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クラスに同じ名前の関数を定義する必要があります。さらに、関数は1つの引数を取る必要があります
  2. このアクションは、ValueChangedというUIControlEventに対して呼び出されます
  3. 電話することを忘れないでください refreshControl.endRefreshing()

詳細についてはリンクに言及してください、そしてすべてのクレジットはその投稿に行きます


これは理論的には質問に答える可能性がありますが、答えの本質的な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
Tunaki、2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.