<!--
{
  "availability" : [
    "iOS: 6.0.0 -",
    "iPadOS: 6.0.0 -",
    "macCatalyst: 13.1.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UIRefreshControl",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(cs)UIRefreshControl"
  },
  "title" : "UIRefreshControl"
}
-->

# UIRefreshControl

A standard control that can initiate the refreshing of a scroll view’s contents.

```
@MainActor class UIRefreshControl
```

## Overview

A [`UIRefreshControl`](/documentation/UIKit/UIRefreshControl) object is a standard control that you attach to any [`UIScrollView`](/documentation/UIKit/UIScrollView) object, including table views and collection views. Add this control to scrollable views to give your users a standard way to refresh their contents. When the user drags the top of the scrollable content area downward, the scroll view reveals the refresh control, begins animating its progress indicator, and notifies your app. You use that notification to update your content and dismiss the refresh control.

![Illustration showing a refresh control. The control displays an animated progress indicator at the top of a scroll view's content area.](images/com.apple.uikit/ui-refresh-control@2x.png)

The refresh control lets you know when to update your content using the target-action mechanism of [`UIControl`](/documentation/UIKit/UIControl). Upon activation, the refresh control calls the action method you provided at configuration time. When adding your action method, configure it to listen for the [`valueChanged`](/documentation/UIKit/UIControl/Event/valueChanged) event, as shown in the following example code. Use your action method to update your content, and call the refresh control’s [`endRefreshing()`](/documentation/UIKit/UIRefreshControl/endRefreshing()) method when you’re done.

```swift
func configureRefreshControl () {
   // Add the refresh control to your UIScrollView object.
   myScrollingView.refreshControl = UIRefreshControl()
   myScrollingView.refreshControl?.addTarget(self, action:
                                      #selector(handleRefreshControl),
                                      for: .valueChanged)
}
    
@objc func handleRefreshControl() {
   // Update your content…

   // Dismiss the refresh control.
   DispatchQueue.main.async {
      self.myScrollingView.refreshControl?.endRefreshing()
   }
}
```

If you’re using a [`UITableViewController`](/documentation/UIKit/UITableViewController), assign its [`refreshControl`](/documentation/UIKit/UITableViewController/refreshControl) property to an instance of [`UIRefreshControl`](/documentation/UIKit/UIRefreshControl). Then associate a target and action method for the [`valueChanged`](/documentation/UIKit/UIControl/Event/valueChanged) event to manage the refresh behavior of the associated table view.

## Topics

### Initializing a refresh control

[`init()`](/documentation/UIKit/UIRefreshControl/init())

Initializes and returns a standard refresh control.

### Accessing the control attributes

[`tintColor`](/documentation/UIKit/UIRefreshControl/tintColor)

The tint color for the refresh control.

[`attributedTitle`](/documentation/UIKit/UIRefreshControl/attributedTitle)

The styled title text to display in the refresh control.

### Managing the refresh status

[`beginRefreshing()`](/documentation/UIKit/UIRefreshControl/beginRefreshing())

Tells the control that a refresh operation was started programmatically.

[`endRefreshing()`](/documentation/UIKit/UIRefreshControl/endRefreshing())

Tells the control that a refresh operation has ended.

[`isRefreshing`](/documentation/UIKit/UIRefreshControl/isRefreshing)

A Boolean value indicating whether a refresh operation has been triggered and is in progress.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)