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

# UIPrintInteractionController

A user interface that manages the printing of documents, images, and other printable content in iOS.

```
@MainActor class UIPrintInteractionController
```

## Overview

[`UIPrintInteractionController`](/documentation/UIKit/UIPrintInteractionController) is the central class for printing in iOS. The shared instance of it represents a print job. A print job includes the content to print and information and options related to its printing, such as output type, job name, paper size, and orientation.

[`UIPrintInteractionController`](/documentation/UIKit/UIPrintInteractionController) has four mutually exclusive properties for giving it the content to print:

- [`printingItem`](/documentation/UIKit/UIPrintInteractionController/printingItem) takes a single print-ready object.
- [`printingItems`](/documentation/UIKit/UIPrintInteractionController/printingItems) takes an array of print-ready objects.
- [`printFormatter`](/documentation/UIKit/UIPrintInteractionController/printFormatter) takes a print formatter, an object that knows how to lay out content of a certain type.
- [`printPageRenderer`](/documentation/UIKit/UIPrintInteractionController/printPageRenderer) takes a page renderer, a custom object that draws the content for printing.

If the [`showsPageRange`](/documentation/UIKit/UIPrintInteractionController/showsPageRange) property is <doc://com.apple.documentation/documentation/Swift/true>, the number of pages is more than 1, and you assign an object to any of these properties except for the [`printingItems`](/documentation/UIKit/UIPrintInteractionController/printingItems) property, the printing options include a control that allows users to select a page range.

When users tap a print button on the app’s user interface, a controller object of the app should respond to the action message by obtaining the shared instance of [`UIPrintInteractionController`](/documentation/UIKit/UIPrintInteractionController) and preparing it for the print job. When the app calls one of the `present...` methods (for example, [`present(animated:completionHandler:)`](/documentation/UIKit/UIPrintInteractionController/present(animated:completionHandler:))), [`UIPrintInteractionController`](/documentation/UIKit/UIPrintInteractionController) displays a view containing printing options. This interface is simple, allowing users to select a printer, specify the number of copies and possibly a range of pages, and choose single-sided or double-sided printing (if the printer supports duplex printing). When users make their selections and tap Print, the print job begins.

For design guidance, see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/printing/).

## Topics

### Getting the shared controller instance

[`shared`](/documentation/UIKit/UIPrintInteractionController/shared)

The shared print-interaction controller object.

### Assigning the delegate

[`delegate`](/documentation/UIKit/UIPrintInteractionController/delegate)

The delegate of the print-interaction controller.

[`UIPrintInteractionControllerDelegate`](/documentation/UIKit/UIPrintInteractionControllerDelegate)

An optional set of methods that the delegate of the shared print-interaction controller implements.

### Determining printability

[`isPrintingAvailable`](/documentation/UIKit/UIPrintInteractionController/isPrintingAvailable)

A Boolean value that indicates whether the device supports printing.

[`canPrint(_:)`](/documentation/UIKit/UIPrintInteractionController/canPrint(_:)-4e0bs)

Returns a Boolean value that indicates whether UIKit can print the contents of a data object.

[`canPrint(_:)`](/documentation/UIKit/UIPrintInteractionController/canPrint(_:)-364vj)

Returns a Boolean value that indicates whether UIKit can print the file that the specified URL references.

[`printableUTIs`](/documentation/UIKit/UIPrintInteractionController/printableUTIs)

Returns a set of the Uniform Type Identifiers for the types of data that UIKit can print.

### Providing the source of printable content

[`printingItem`](/documentation/UIKit/UIPrintInteractionController/printingItem)

A single ready-to-print object.

[`printingItems`](/documentation/UIKit/UIPrintInteractionController/printingItems)

An array of ready-to-print objects.

[`printPageRenderer`](/documentation/UIKit/UIPrintInteractionController/printPageRenderer)

An object that draws pages of printable content when UIKit requests it.

[`printFormatter`](/documentation/UIKit/UIPrintInteractionController/printFormatter)

An object that lays out the content of pages according to the kind of content.

### Presenting the printing user interface

[`present(animated:completionHandler:)`](/documentation/UIKit/UIPrintInteractionController/present(animated:completionHandler:))

Presents the iPhone printing user interface in a sheet, optionally animating it to slide up from the bottom of the screen.

[`present(from:animated:completionHandler:)`](/documentation/UIKit/UIPrintInteractionController/present(from:animated:completionHandler:))

Presents the iPad printing user interface in a popover view, optionally animating it from a bar-button item.

[`present(from:in:animated:completionHandler:)`](/documentation/UIKit/UIPrintInteractionController/present(from:in:animated:completionHandler:))

Presents the iPad printing user interface in a popover view, optionally animating it from any area in a view.

[`dismiss(animated:)`](/documentation/UIKit/UIPrintInteractionController/dismiss(animated:))

Dismisses the printing-options sheet or popover.

### Printing directly to a printer

[`print(to:completionHandler:)`](/documentation/UIKit/UIPrintInteractionController/print(to:completionHandler:))

Prints directly to the specified printer.

[`UIPrintInteractionController.CompletionHandler`](/documentation/UIKit/UIPrintInteractionController/CompletionHandler)

A completion handler for responding to the completion of a print job or for handling printing errors.

### Accessing print-job information

[`printInfo`](/documentation/UIKit/UIPrintInteractionController/printInfo)

An object that encapsulates information about the print job.

[`printPaper`](/documentation/UIKit/UIPrintInteractionController/printPaper)

An object that represents the paper size and printing area for the print job.

[`showsNumberOfCopies`](/documentation/UIKit/UIPrintInteractionController/showsNumberOfCopies)

A Boolean value that determines whether the printing options include the number of copies.

[`showsPaperSelectionForLoadedPapers`](/documentation/UIKit/UIPrintInteractionController/showsPaperSelectionForLoadedPapers)

A Boolean value that determines whether the paper selection menu displays.

[`showsPaperOrientation`](/documentation/UIKit/UIPrintInteractionController/showsPaperOrientation)

A Boolean value that indicates whether the printing options include the paper-orientation control.

[`showsPageRange`](/documentation/UIKit/UIPrintInteractionController/showsPageRange)

A Boolean value that determines whether the printing options include a page-range control.

### Handling printing errors

[`UIPrintErrorDomain`](/documentation/UIKit/UIPrintErrorDomain)

The string constant that defines the UIKit printing error domain.

[`UIPrintError`](/documentation/UIKit/UIPrintError)

A structure that contains information about a printing error.

[`UIPrintError.Code`](/documentation/UIKit/UIPrintError/Code)

Constants that specify the print error code.



---

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)