vibetunnel/docs/uikit.md
2025-06-15 23:14:29 +02:00

1.4 MiB
Raw Blame History

https://developer.apple.com/documentation/uikit/

Framework

UIKit

Construct and manage a graphical, event-driven user interface for your iOS, iPadOS, or tvOS app.

Overview

UIKit provides a variety of features for building apps, including components you can use to construct the core infrastructure of your iOS, iPadOS, or tvOS apps. The framework provides the window and view architecture for implementing your UI, the event-handling infrastructure for delivering Multi-Touch and other types of input to your app, and the main run loop for managing interactions between the user, the system, and your app.

UIKit also includes support for animations, documents, drawing and printing, text management and display, search, app extensions, resource management, and getting information about the current device. You can also customize accessibility support, and localize your apps interface for different languages, countries, or cultural regions.

UIKit works seamlessly with the SwiftUI framework, so you can implement parts of your UIKit app in SwiftUI or mix interface elements between the two frameworks. For example, you can place UIKit views and view controllers inside SwiftUI views, and vice versa.

To build a macOS app, you can use SwiftUI to create an app that works across all of Apples platforms, or use AppKit to create an app for Mac only. Alternatively, you can bring your UIKit iPad app to the Mac with Mac Catalyst.

Topics

Essentials

Adopting Liquid Glass

Find out how to bring the new material to your app.

UIKit updates

Learn about important changes to UIKit.

About App Development with UIKit

Learn about the basic support that UIKit and Xcode provide for your iOS and tvOS apps.

Secure personal data, and respect user preferences for how data is used.

App structure

UIKit manages your apps interactions with the system and provides classes for you to manage your apps data and resources.

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Organize your apps data and share that data on the pasteboard.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Extend your apps basic functionality to other parts of the system.

Display activity-based services to people.

Create a version of your iPad app that users can run on a Mac device.

User interface

Views help you display content onscreen and facilitate user interactions; view controllers help you manage views and the structure of your interface.

Present your content onscreen and define the interactions allowed with that content.

Manage your interface using view controllers and facilitate navigation around your apps content.

Use stack views to lay out the views of your interface automatically. Use Auto Layout when you require precise placement of your views.

Apply Liquid Glass to views, support Dark Mode in your app, customize the appearance of bars, and use appearance proxies to modify your UI.

Provide feed

Responders and gesture recognizers help you handle touches and other events. Drag and drop, focus, peek and pop, and accessibility handle other user interactions.

Encapsulate your apps event-handling logic in gesture recognizers so that you can reuse that code throughout your app.

Simplify interactions with your app using menu systems, contextual menus, Home Screen quick actions, and keyboard shortcuts.

Bring drag and drop to your app by using interaction APIs with your views.

Support pointer interactions in your custom controls and views.

Handle user interactions like double tap and squeeze on Apple Pencil.

Navigate the interface of your UIKit app using a remote, game controller, or keyboard.

Make your UIKit apps accessible to everyone who uses iOS and tvOS.

Graphics, drawing, and printing

UIKit provides classes and protocols that help you configure your drawing environment and render your content.

Create and manage images, including those that use bitmap and PDF formats.

Configure your apps drawing environment using colors, renderers, draw paths, strings, and shadows.

Display the system print panels and manage the printing process.

Text

In addition to text views that simplify displaying text in your app, UIKit provides custom text management and rendering that supports the system keyboards.

Display text, manage fonts, and check spelling.

Manage text storage and perform custom layout of text-based content in your apps views.

Configure the system keyboard, create your own keyboards to handle input, or detect key presses on a physical keyboard.

Add support for Writing Tools to your apps text views.

Configure text fields and custom views that accept text to handle input from Apple Pencil.

Deprecated

Avoid using deprecated classes and protocols in your apps.

Review unsupported symbols and their replacements.

Reference

This document describes constants that are used throughout the UIKit framework.

The UIKit framework defines data types that are used in multiple places throughout the framework.

The UIKit framework defines a number of functions, many of them used in graphics and drawing operations.

Structures

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.


https://developer.apple.com/documentation/uikit

Framework

UIKit

Construct and manage a graphical, event-driven user interface for your iOS, iPadOS, or tvOS app.

Overview

UIKit provides a variety of features for building apps, including components you can use to construct the core infrastructure of your iOS, iPadOS, or tvOS apps. The framework provides the window and view architecture for implementing your UI, the event-handling infrastructure for delivering Multi-Touch and other types of input to your app, and the main run loop for managing interactions between the user, the system, and your app.

UIKit also includes support for animations, documents, drawing and printing, text management and display, search, app extensions, resource management, and getting information about the current device. You can also customize accessibility support, and localize your apps interface for different languages, countries, or cultural regions.

UIKit works seamlessly with the SwiftUI framework, so you can implement parts of your UIKit app in SwiftUI or mix interface elements between the two frameworks. For example, you can place UIKit views and view controllers inside SwiftUI views, and vice versa.

To build a macOS app, you can use SwiftUI to create an app that works across all of Apples platforms, or use AppKit to create an app for Mac only. Alternatively, you can bring your UIKit iPad app to the Mac with Mac Catalyst.

Topics

Essentials

Adopting Liquid Glass

Find out how to bring the new material to your app.

UIKit updates

Learn about important changes to UIKit.

About App Development with UIKit

Learn about the basic support that UIKit and Xcode provide for your iOS and tvOS apps.

Secure personal data, and respect user preferences for how data is used.

App structure

UIKit manages your apps interactions with the system and provides classes for you to manage your apps data and resources.

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Organize your apps data and share that data on the pasteboard.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Extend your apps basic functionality to other parts of the system.

Display activity-based services to people.

Create a version of your iPad app that users can run on a Mac device.

User interface

Views help you display content onscreen and facilitate user interactions; view controllers help you manage views and the structure of your interface.

Present your content onscreen and define the interactions allowed with that content.

Manage your interface using view controllers and facilitate navigation around your apps content.

Use stack views to lay out the views of your interface automatically. Use Auto Layout when you require precise placement of your views.

Apply Liquid Glass to views, support Dark Mode in your app, customize the appearance of bars, and use appearance proxies to modify your UI.

Provide feed

Responders and gesture recognizers help you handle touches and other events. Drag and drop, focus, peek and pop, and accessibility handle other user interactions.

Encapsulate your apps event-handling logic in gesture recognizers so that you can reuse that code throughout your app.

Simplify interactions with your app using menu systems, contextual menus, Home Screen quick actions, and keyboard shortcuts.

Bring drag and drop to your app by using interaction APIs with your views.

Support pointer interactions in your custom controls and views.

Handle user interactions like double tap and squeeze on Apple Pencil.

Navigate the interface of your UIKit app using a remote, game controller, or keyboard.

Make your UIKit apps accessible to everyone who uses iOS and tvOS.

Graphics, drawing, and printing

UIKit provides classes and protocols that help you configure your drawing environment and render your content.

Create and manage images, including those that use bitmap and PDF formats.

Configure your apps drawing environment using colors, renderers, draw paths, strings, and shadows.

Display the system print panels and manage the printing process.

Text

In addition to text views that simplify displaying text in your app, UIKit provides custom text management and rendering that supports the system keyboards.

Display text, manage fonts, and check spelling.

Manage text storage and perform custom layout of text-based content in your apps views.

Configure the system keyboard, create your own keyboards to handle input, or detect key presses on a physical keyboard.

Add support for Writing Tools to your apps text views.

Configure text fields and custom views that accept text to handle input from Apple Pencil.

Deprecated

Avoid using deprecated classes and protocols in your apps.

Review unsupported symbols and their replacements.

Reference

This document describes constants that are used throughout the UIKit framework.

The UIKit framework defines data types that are used in multiple places throughout the framework.

The UIKit framework defines a number of functions, many of them used in graphics and drawing operations.

Structures

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.


https://developer.apple.com/documentation/uikit/mac-catalyst

Collection

  • UIKit
  • Mac Catalyst

API Collection

Mac Catalyst

Create a version of your iPad app that users can run on a Mac device.

Overview

With Mac Catalyst, you can make a Mac version of your iPad app. Click the Mac checkbox in your iPad apps project settings to configure the project to build both Mac and iPad versions of your app. The two apps share the same project and source code, making it easy to change your code in one place.

For information about designing a Mac version of your iPad app, see Mac Catalyst in the Human Interface Guidelines.

Topics

Essentials

Creating a Mac version of your iPad app

Bring your iPad app to macOS with Mac Catalyst.

App support

Bring an iPad App to the Mac with Mac Catalyst

Build a native Mac app from the same codebase as your iPad app.

Choosing a user interface idiom for your Mac app

Select the iPad or the Mac user interface idiom in your Mac app built with Mac Catalyst.

Optimizing your iPad app for Mac

Make your iPad app more like a Mac app by taking advantage of system features in macOS.

LSMinimumSystemVersion

The minimum version of the operating system required for the app to run in macOS.

UIApplicationSupportsTabbedSceneCollection

A Boolean value indicating whether an app built with Mac Catalyst supports automatic tabbing mode.

User interface

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.

Building and improving your app with Mac Catalyst

Improve your iPadOS app with Mac Catalyst by supporting native controls, multiple windows, sharing, printing, menus and keyboard shortcuts.

Displaying a checkbox in your Mac app built with Mac Catalyst

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

Removing the title bar in your Mac app built with Mac Catalyst

Display content that fills the entire height of a window by removing the title bar.

Provide a space for controls under a windows title bar and above your custom content.

Touch Bar

Display interactive content and controls in the Touch Bar.

User interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Adding menus and shortcuts to the menu bar and user interface

Provide quick access to useful actions by adding menus and keyboard shortcuts to your Mac app built with Mac Catalyst.

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.

class UIHoverGestureRecognizer

A continuous gesture recognizer that interprets pointer movement over a view.

User preferences

Displaying a Preferences window

Provide a Preferences window in your Mac app built with Mac Catalyst so users can manage app preferences defined in a Settings bundle.

Detecting changes in the preferences window

Listen for and respond to a users preference changes in your Mac app built with Mac Catalyst using Combine.

Tooltips

Showing help tags for views and controls using tooltip interactions

Explain the purpose of interface elements by showing a tooltip when a person positions the pointer over the element.

class UIToolTipInteraction

An interaction object that makes it possible to show a tooltip when hovering a pointer over a view or control.

protocol UIToolTipInteractionDelegate

An interface that provides tooltip settings to an interaction.

See Also

App structure

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Organize your apps data and share that data on the pasteboard.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Extend your apps basic functionality to other parts of the system.

Display activity-based services to people.


https://developer.apple.com/documentation/uikit/about-app-development-with-uikit

  • UIKit
  • About App Development with UIKit

Article

About App Development with UIKit

Learn about the basic support that UIKit and Xcode provide for your iOS and tvOS apps.

Overview

The UIKit framework provides the core objects that you need to build apps for iOS and tvOS. You use these objects to display your content onscreen, to interact with that content, and to manage interactions with the system. Apps rely on UIKit for their basic behavior, and UIKit provides many ways for you to customize that behavior to match your specific needs.

Xcode provides template projects as starting points for every app you create. For example, the following image shows the structure of an app created using the single view app template in Xcode. The template projects provide a minimal user interface, so you can build and run your project immediately and see the results on a device or in the simulator.

When you build your app, Xcode compiles your source files and creates an app bundle for your project. An app bundle is a structured directory that contains the code and resources associated with the app. Resources include the image assets, storyboard files, strings files, and app metadata that support your code. The structure of the app bundle is important, but Xcode knows where your resources need to go, so dont worry about it for now.

Required Resources

Every UIKit app is required to have the following resources:

  • App icons

  • Launch screen storyboard

The system displays your app icon on the Home screen, in Settings, and anywhere it needs to differentiate your app from other apps. Because it is used in multiple places, and on multiple devices, you provide multiple versions of your app icon in your Xcode projects AppIcon image asset. Your app icon should be distinctive to help the user identify your app quickly on the Home screen. However, you may vary the details of your icon to accommodate the different image sizes that you must provide.

The LaunchScreen.storyboard file contains your apps initial user interface, and it can be a splash screen or a simplified version of your actual interface. When the user taps your apps icon, the system displays your launch screen immediately, letting the user know that your app is now launching. The launch screen also provides cover for your app while it initializes itself. When your app is ready, the system hides the launch screen and reveals your apps actual interface.

Required App Metadata

The system derives information about your apps configuration and capabilities from the information property list ( Info.plist) file in your app bundle. Xcode provides a preconfigured version of this file with every new project template, but you will likely need to modify this file at some point. For example, if your app relies on specific hardware, or uses specific system frameworks, you might need to add information related to those features to this file.

One common modification you can make to the Info.plist file is to declare your apps hardware and software requirements. These requirements are how you communicate to the system what your app needs to run. For example, a navigation app might require the presence of GPS hardware to provide turn-by-turn directions. The App Store prevents an app from being installed on a device that does not meet your apps requirements.

For information about the keys that you can include in your Info.plist file, see Information Property List Key Reference.

Code Structure of a UIKit App

UIKit provides many of your apps core objects, including those that interact with the system, run the apps main event loop, and display your content onscreen. You use most of these objects as-is or with only minor modifications. Knowing which objects to modify, and when to modify them, is crucial to implementing your app.

The structure of UIKit apps is based on the Model-View-Controller (MVC) design pattern, wherein objects are divided by their purpose. Model objects manage the apps data and business logic. View objects provide the visual representation of your data. Controller objects act as a bridge between your model and view objects, moving data between them at appropriate times.

The following image represents a fairly typical structure of a UIKit app. You provide the model objects that represent your apps data structures. UIKit provides most of the view objects, although you can define custom views for your data, as needed. Coordinating the exchange of data between your data objects and the UIKit views are your view controllers and app delegate object.

The UIKit and Foundation frameworks provide many of the basic types that you use to define your apps model objects. UIKit provides a UIDocument object for organizing the data structures that belong in a disk-based file. The Foundation framework defines basic objects representing strings, numbers, arrays, and other data types. The Swift Standard Library provides many of the same types available in the Foundation framework.

UIKit provides most of the objects in the controller and view layers of your app. Specifically, UIKit defines the UIView class, which is usually responsible for displaying your content onscreen. (You can also render content directly to the screen using Metal and other system frameworks.) The UIApplication object runs your apps main event loop and manages your apps overall life cycle.

See Also

Essentials

Adopting Liquid Glass

Find out how to bring the new material to your app.

UIKit updates

Learn about important changes to UIKit.

Secure personal data, and respect user preferences for how data is used.


https://developer.apple.com/documentation/uikit/protecting-the-user-s-privacy

Collection

  • UIKit
  • Protecting the Users Privacy

Protecting the Users Privacy

Secure personal data, and respect user preferences for how data is used.

Overview

Designing for user privacy is important. Most Apple devices contain personal data that the user doesnt want to expose to apps or to external entities. If your app accesses or uses data inappropriately, the user might stop using your app and even delete it from their device.

Access user or device data only with the users informed consent obtained in accordance with applicable law. In addition, take appropriate steps to protect user and device data, and be transparent about how you use it.

Review Guidelines from Government and Industry Sources

Consult these documents:

  • Mobile Privacy Disclosures: Building Trust Through Transparency. The Federal Trade Commissions report on mobile privacy.

  • Opinion 02/2013 on Apps on Smart Devices. The EU Data Protection Commissioners opinion on data protection for mobile apps.

  • Privacy on the Go: Recommendations for the Mobile Ecosystem. The California State Attorney Generals recommendations for mobile privacy.

  • Smartphone Privacy Initiative (2012) in English or Japanese and Smartphone Privacy Initiative II (2013) in English or Japanese. The Japanese Ministry of Internal Affairs and Communications Smartphone Privacy Initiatives.

Request Access Only When Your App Needs the Data

Request access to sensitive user or device data—like location, contacts, and photos—at the time your app needs the data. Supply a purpose string (sometimes called a usage description string) in your apps Info.plist file that the system can present to a user explaining why your app needs access. Provide reasonable fallback behavior in situations where the user doesnt grant access to the requested data. For more details, see Requesting access to protected resources.

Be Transparent About How Data Will Be Used

For example, when you submit your app to the App Store, specify a URL for your or statement as part of your App Store Connect metadata. You can also summarize that policy or statement in your app description.

Give the User Control Over Data and Protect Data You Collect

Respect the users preferences, and take reasonable steps to protect the data that you collect in your apps:

  • Provide settings that allow the user to disable access to sensitive information. The operating system does this automatically for protected system resources—like location, contacts, and health data—through the Privacy menu of the Settings app. Extend this behavior to any data you cache from these sources or collect directly. For example, if your users build a social media profile containing personal information, offer them a way to delete the data (including any server copies you have).

  • When storing files in iOS, use the strongest data protection level that works for your app, as described in Encrypting Your Apps Files. Use App Transport Security when sending user or device data over the network, as described in NSAppTransportSecurity.

  • If your app uses the ASIdentifierManager class, respect the value of its isAdvertisingTrackingEnabled property. If the user sets that property to false, then use the ASIdentifierManager class only for limited advertising purposes, like frequency capping, attribution, conversion events, estimating the number of unique users, advertising fraud detection, and debugging. See the AdSupport framework for additional information.

  • If you must identify users persistently, use the identifierForVendor property of the UIDevice class or the advertisingIdentifier property of the ASIdentifierManager class.

Use the Minimum Amount of Data Required

Request and use the minimum amount of user or device data needed to accomplish a given task. Dont seek access to or collect data for unnecessary or non-obvious reasons, or because you think it might be useful later.

If your app supports audio input, configure your audio session for recording only at the point where you actually plan to begin recording. Dont configure your audio session for recording at launch time if you dont plan to record right away. The system alerts users when apps configure their audio session for recording and gives the user the option to disable recording for your app.

Topics

Supporting Privacy

Requesting access to protected resources

Provide a purpose string that explains to a person why you need access to protected resources on their device.

Encrypting Your Apps Files

Protect the users data in iOS by encrypting it on disk.

See Also

Essentials

Adopting Liquid Glass

Find out how to bring the new material to your app.

UIKit updates

Learn about important changes to UIKit.

About App Development with UIKit

Learn about the basic support that UIKit and Xcode provide for your iOS and tvOS apps.


https://developer.apple.com/documentation/uikit/app-and-environment

Collection

  • UIKit
  • App and environment

API Collection

App and environment

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Overview

In iOS 13 and later, a person can create and manage multiple instances of your apps user interface simultaneously, and switch between them using the app switcher. On iPad, a person can also display multiple instances of your app side by side. Each instance of your UI displays different content, or displays the same content in a different way. For example, a person can display one instance of the Calendar app showing a specific day, and another showing an entire month.

UIKit communicates details about the current environment using trait collections, which reflect a combination of device settings, interface settings, and user preferences. For example, you use traits to detect whether Dark Mode is active for the current view or view controller. Consult the current trait collection of your UIView or UIViewController object when you want to customize its contents based on the current environment. Adopt the UITraitEnvironment protocol in other objects when you want them to receive trait notification changes.

Topics

Life cycle

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

Initialize your apps data structures, prepare your app to run, and respond to any launch-time requests from the system.

class UIApplication

The centralized point of control and coordination for apps running in iOS.

protocol UIApplicationDelegate

A set of methods to manage shared behaviors for your app.

Manage multiple instances of your apps UI simultaneously, and direct resources to the appropriate instance of your UI.

Device environment

class UIDevice

A representation of the current device.

class UIStatusBarManager

An object that describes the configuration of the status bar.

Adaptivity

Reduce the need to manually register for trait changes when you use traits within a method or closure that supports automatic trait tracking.

Responding to changing display modes on Apple TV

Change images and resources dynamically when the screen gamut on your device changes.

class UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

protocol UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

protocol UIMutableTraits

A mutable container of traits.

protocol UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.

Custom traits

typealias UITrait

A type representing a trait in a trait collection.

protocol UITraitDefinition

iPad

Building a desktop-class iPad app

Optimize your iPad apps user experience by adopting desktop-class enhancements for multitasking with Stage Manager, document interactions, text editing, search, and more.

Elevating your iPad app with a tab bar and sidebar

Provide a compact, ergonomic tab bar for quick access to key parts of your app, and a sidebar for in-depth navigation.

Supporting desktop-class features in your iPad app

Enhance your iPad app by adding desktop-class features and document support.

Implement multitasking APIs to seamlessly integrate your app with iPadOS.

Guided Access

protocol UIGuidedAccessRestrictionDelegate

A set of methods you use to add custom restrictions for the Guided Access feature in iOS.

Returns the restriction state for the specified guided access restriction.

Architecture

Ensure that your app behaves as expected by adapting it to support later versions of the operating system.

Creates the application object and the application delegate and sets up the event cycle.

See Also

App structure

Organize your apps data and share that data on the pasteboard.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Extend your apps basic functionality to other parts of the system.

Display activity-based services to people.

Create a version of your iPad app that users can run on a Mac device.


https://developer.apple.com/documentation/uikit/documents-data-and-pasteboard

Collection

  • UIKit
  • Documents, data, and pasteboard

API Collection

Documents, data, and pasteboard

Organize your apps data and share that data on the pasteboard.

Topics

Documents

class UIDocument

An abstract base class for managing discrete portions of your apps data.

class UIManagedDocument

A managed document object that integrates with Core Data.

Synchronizing documents in the iCloud environment

Manage documents across multiple devices to create a seamless editing and collaboration experience.

Document presentation

class UIDocumentViewController

A view controller that manages and presents a document stored locally or in the cloud.

Data management

protocol UIDataSourceModelAssociation

A set of methods that defines an interface for providing persistent references to data objects in your app.

Pasteboard

class UIPasteControl

A button that a person taps to place pasteboard contents in your app.

class Configuration

An object that determines a paste buttons color, corner style, icon, and text.

enum DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

class UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

class UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.

protocol UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.

See Also

App structure

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Extend your apps basic functionality to other parts of the system.

Display activity-based services to people.

Create a version of your iPad app that users can run on a Mac device.


https://developer.apple.com/documentation/uikit/resource-management

Collection

  • UIKit
  • Resource management

API Collection

Resource management

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Topics

Storyboards

Customizing the behavior of segue-based presentations

Pass data between view controllers during a segue, and programmatically control when segues occur.

Dismissing a view controller with an unwind segue

Configure an unwind segue in your storyboard file that dynamically chooses the most appropriate view controller to display next.

class UIStoryboard

An encapsulation of the design-time view controller graph represented in an Interface Builder storyboard resource file.

class UIStoryboardSegue

An object that prepares for and performs the visual transition between two view controllers.

class UIStoryboardUnwindSegueSource

An encapsulation of information about an unwind segue.

Assets

class UIImageAsset

A container for a collection of images that represent multiple ways of describing a single piece of artwork.

class NSDataAsset

An object from a data set type stored in an asset catalog.

Nib files

class UINib

An object that contains Interface Builder nib files.

See Also

App structure

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Organize your apps data and share that data on the pasteboard.

Extend your apps basic functionality to other parts of the system.

Display activity-based services to people.

Create a version of your iPad app that users can run on a Mac device.


https://developer.apple.com/documentation/uikit/app-extensions

Collection

  • UIKit
  • App extensions

API Collection

App extensions

Extend your apps basic functionality to other parts of the system.

Topics

Extension support

Use these Foundation classes to manage interactions between your app extension and its hosting app.

protocol NSExtensionRequestHandling : NSObjectProtocol

The interface an app extension uses to respond to a request from a host app.

class NSExtensionContext

The host app context from which an app extension is invoked.

Document provider

class NSFileProviderExtension

The principal class for the nonreplicated File Provider extension.

class UIDocumentPickerExtensionViewController

The principal class for the Document Picker View Controller extension.

Deprecated

Custom keyboard

protocol UITextDocumentProxy

An object that provides textual context to a custom keyboard.

protocol UIInputViewAudioFeedback

A property that enables a custom input or keyboard accessory view to play standard keyboard input clicks.

class UIInputViewController

The primary view controller for a custom keyboard app extension.

class UILexicon

A read-only array of term pairs, each in a lexicon entry object, for a custom keyboard.

class UILexiconEntry

A read-only term pair, available within a lexicon object, for a custom keyboard.

See Also

App structure

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Organize your apps data and share that data on the pasteboard.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Display activity-based services to people.

Create a version of your iPad app that users can run on a Mac device.


https://developer.apple.com/documentation/uikit/interprocess-communication

Collection

  • UIKit
  • Interprocess communication

API Collection

Interprocess communication

Display activity-based services to people.

Topics

User activities

class NSUserActivity

A representation of the state of your app at a moment in time.

protocol UIUserActivityRestoring

The protocol you adopt to restore an objects state from a user activity.

Services

class UIActivity

An abstract class that you subclass to implement app-specific services.

class UIActivityViewController

A view controller that you use to offer standard services from your app.

protocol UIActivityItemSource

A set of methods that an activity view controller uses to retrieve the data items to act on.

class UIActivityItemProvider

A proxy for data that passes to an activity view controller.

See Also

App structure

Manage life-cycle events and your apps UI scenes, and get information about traits and the environment in which your app runs.

Organize your apps data and share that data on the pasteboard.

Manage the images, strings, storyboards, and nib files that you use to implement your apps interface.

Extend your apps basic functionality to other parts of the system.

Create a version of your iPad app that users can run on a Mac device.


https://developer.apple.com/documentation/uikit/views-and-controls

Collection

  • UIKit
  • Views and controls

API Collection

Views and controls

Present your content onscreen and define the interactions allowed with that content.

Overview

Views and controls are the visual building blocks of your apps user interface. Use them to draw and organize your apps content onscreen.

Views can host other views. Embedding one view inside another creates a containment relationship between the host view (known as the superview) and the embedded view (known as the subview). View hierarchies make it easier to manage views.

You can also use views to do any of the following:

  • Respond to touches and other events (either directly or in coordination with gesture recognizers).

  • Draw custom content using Core Graphics or UIKit classes.

  • Support drag and drop interactions.

  • Respond to focus changes.

  • Animate the size, position, and appearance attributes of the view.

UIView is the root class for all views and defines their common behavior. UIControl defines additional behaviors that are specific to buttons, switches, and other views designed for user interactions.

For additional information about how to use views and controls, see Human Interface Guidelines. To see examples of UIKit controls, see UIKit Catalog: Creating and customizing views and controls.

Topics

View fundamentals

class UIView

An object that manages the content for a rectangular area on the screen.

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.

Container views

Organize and present large data sets using container views.

Autosizing Views for Localization in iOS

Add auto layout constraints to your app to achieve localizable views.

Display nested views using a configurable and highly customizable layout.

Display data in a single column of customizable rows.

class UIStackView

A streamlined interface for laying out a collection of views in either a column or a row.

class UIScrollView

A view that allows the scrolling and zooming of its contained views.

Content views

class UIActivityIndicatorView

A view that shows that a task is in progress.

class UICalendarView

A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.

class UIContentUnavailableView

A view that indicates theres no content to display.

class UIImageView

A view that displays a single image or a sequence of animated images in your interface.

class UIPickerView

A view that uses a spinning-wheel or slot-machine metaphor to show one or more sets of values.

class UIProgressView

A view that depicts the progress of a task over time.

class UIWebView

A view that embeds web content in your app.

Deprecated

Controls

Gather input and respond to user interactions with controls.

Responding to control-based events using target-action

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

class UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

class UISlider

A control for selecting a single value from a continuous range of values.

class UIStepper

A control for incrementing or decrementing a value.

class UISwitch

A control that offers a binary choice, such as on/off.

Text views

Display and edit text using text views.

class UILabel

A view that displays one or more lines of informational text.

class UITextField

An object that displays an editable text area in your interface.

class UITextView

A scrollable, multiline text region.

Extend the standard drag and drop support for text views to include custom types of content.

Search field

class UISearchTextField

A view for displaying and editing text and search tokens.

class UISearchToken

Search criteria in a search text field, represented by text and an optional icon.

protocol UISearchTextFieldDelegate

The interface for the delegate of a search field.

Visual effects

class UIVisualEffect

An initializer for visual effect views and blur and vibrancy effect objects.

class UIVisualEffectView

An object that implements some complex visual effects.

class UIVibrancyEffect

An object that amplifies and adjusts the color of the content layered behind a visual effect view.

class UIBlurEffect

An object that applies a blurring effect to the content layered behind a visual effect view.

Bars

Manage the items displayed on navigation bars, tab bars, search bars, and toolbars.

class UIBarItem

An abstract superclass for items that you can add to a bar that appears at the bottom of the screen.

class UIBarButtonItem

A specialized button for placement on a toolbar, navigation bar, or shortcuts bar.

class UIBarButtonItemGroup

A group of one or more bar button items for placement on a navigation bar or shortcuts bar.

class UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

class UISearchBar

A specialized view for receiving search-related information from the user.

class UIToolbar

A control that displays one or more buttons along the bottom edge of your interface.

class UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

class UITabBarItem

An object that describes an item in a tab bar.

protocol UIBarPositioning

A set of methods for defining the positioning of bars in iOS apps.

protocol UIBarPositioningDelegate

A set of methods that support the positioning of a bar that conforms to the UIBarPositioning protocol.

Content viewer

class UILargeContentViewerInteraction

An interaction that enables a gesture to present the large content viewer for cases when supporting the largest dynamic type sizes isnt appropriate.

protocol UILargeContentViewerInteractionDelegate

An object that customizes the behavior of the large content viewer interactions.

protocol UILargeContentViewerItem

Methods that provide details about how to display your custom content in the large content viewer.

Private Click Measurement (PCM)

class UIEventAttributionView

An overlay view that verifies user interaction for Web AdAttributionKit.

class UIEventAttribution

An object that contains event attribution information for Web AdAttributionKit.

NSAdvertisingAttributionReportEndpoint

The URL where Private Click Measurement and SKAdNetwork send attribution information.

SwiftUI

Using SwiftUI with UIKit

Learn how to incorporate SwiftUI views into a UIKit app.

struct UIOffset

A structure that specifies an amount to offset a position.

struct UIAxis

A structure that specifies the layout axes.

struct UIEdgeInsets

The inset distances for views.

struct NSDirectionalEdgeInsets

The inset distances for views, taking the user interface layout direction into account.

struct NSDirectionalRectEdge

Constants that specify an edge or a set of edges, taking the user interface layout direction into account.

enum NSRectAlignment

Constants that specify alignment to an edge or a set of edges depending on the user interface layout direction.

struct UIDirectionalRectEdge

Macros that UIKit defines.

See Also

User interface

Manage your interface using view controllers and facilitate navigation around your apps content.

Use stack views to lay out the views of your interface automatically. Use Auto Layout when you require precise placement of your views.

Apply Liquid Glass to views, support Dark Mode in your app, customize the appearance of bars, and use appearance proxies to modify your UI.

Provide feed

Provide a container for your view hierarchies and other content.


https://developer.apple.com/documentation/uikit/view-controllers


https://developer.apple.com/documentation/uikit/view-layout


https://developer.apple.com/documentation/uikit/appearance-customization


https://developer.apple.com/documentation/uikit/animation-and-haptics


https://developer.apple.com/documentation/uikit/windows-and-screens


https://developer.apple.com/documentation/uikit/touches-presses-and-gestures


https://developer.apple.com/documentation/uikit/menus-and-shortcuts


https://developer.apple.com/documentation/uikit/drag-and-drop


https://developer.apple.com/documentation/uikit/pointer-interactions


https://developer.apple.com/documentation/uikit/apple-pencil-interactions


https://developer.apple.com/documentation/uikit/focus-based-navigation


https://developer.apple.com/documentation/uikit/accessibility-for-uikit


https://developer.apple.com/documentation/uikit/images-and-pdf


https://developer.apple.com/documentation/uikit/drawing


https://developer.apple.com/documentation/uikit/printing


https://developer.apple.com/documentation/uikit/text-display-and-fonts


https://developer.apple.com/documentation/uikit/textkit


https://developer.apple.com/documentation/uikit/keyboards-and-input


https://developer.apple.com/documentation/uikit/writing-tools


https://developer.apple.com/documentation/uikit/handwriting-recognition


https://developer.apple.com/documentation/uikit/deprecated-symbols

Collection

  • UIKit
  • Deprecated symbols

API Collection

Deprecated symbols

Review unsupported symbols and their replacements.

Topics

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.

Deprecated enumerations

enum UIStatusBarAnimation

Constants that specify the animation of the status bar as its hidden or made visible.

Deprecated functions

func UIApplicationMain(Int32, UnsafeMutablePointer<UnsafeMutablePointer<Int8>>!, String?, String?) -> Int32

Creates the application object and the application delegate and sets up the event cycle.

Deprecated samples

Implementing Peek and Pop

Accelerate actions in your app by providing shortcuts to preview content in detail view controllers.


https://developer.apple.com/documentation/uikit/uikit-enumerations

Collection

  • UIKit
  • UIKit Enumerations

API Collection

UIKit Enumerations

Topics

Enumerations

enum ExpandedStatus

enum ComponentSize

enum UIFocusItemDeferralMode

See Also

Reference

This document describes constants that are used throughout the UIKit framework.

The UIKit framework defines data types that are used in multiple places throughout the framework.

The UIKit framework defines a number of functions, many of them used in graphics and drawing operations.


https://developer.apple.com/documentation/uikit/uikit-constants


https://developer.apple.com/documentation/uikit/uikit-data-types

Collection

  • UIKit
  • UIKit Data Types

API Collection

UIKit Data Types

The UIKit framework defines data types that are used in multiple places throughout the framework.

Topics

Data Types

struct ComponentKey

struct Highlight

struct TextAlignment

struct TextList

See Also

Reference

This document describes constants that are used throughout the UIKit framework.

The UIKit framework defines a number of functions, many of them used in graphics and drawing operations.


https://developer.apple.com/documentation/uikit/uikit-functions

Collection

  • UIKit
  • UIKit Functions

API Collection

UIKit Functions

The UIKit framework defines a number of functions, many of them used in graphics and drawing operations.

Topics

See Also

Reference

This document describes constants that are used throughout the UIKit framework.

The UIKit framework defines data types that are used in multiple places throughout the framework.


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct

  • UIKit
  • UIConfigurationTextAttributesTransformer

Structure

UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

Mac CatalystvisionOS

struct UIConfigurationTextAttributesTransformer

Overview

Use a transformer to affect how your attributed text appears on the UI. You provide a closure when initializing the transformer. Your closure accepts a container with the current text attributes and returns a container with the new text attributes.

let transformer = UIConfigurationTextAttributesTransformer { incoming in var outgoing = incoming outgoing.foregroundColor = UIColor.black outgoing.font = UIFont.boldSystemFont(ofSize: 20) return outgoing }

Topics

Creating a text attributes transformer

Creates a new text attributes transformer.

Defining a text transformation

A closure that defines the text transformation.

Calling a text transformer

Calls the transform closure of the text attributes transformer.

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/mac-catalyst).


https://developer.apple.com/documentation/uikit/about-app-development-with-uikit)


https://developer.apple.com/documentation/uikit/protecting-the-user-s-privacy)


https://developer.apple.com/documentation/uikit/app-and-environment)


https://developer.apple.com/documentation/uikit/documents-data-and-pasteboard)


https://developer.apple.com/documentation/uikit/resource-management)


https://developer.apple.com/documentation/uikit/app-extensions)


https://developer.apple.com/documentation/uikit/interprocess-communication)


https://developer.apple.com/documentation/uikit/mac-catalyst)


https://developer.apple.com/documentation/uikit/views-and-controls)


https://developer.apple.com/documentation/uikit/view-controllers)


https://developer.apple.com/documentation/uikit/view-layout)


https://developer.apple.com/documentation/uikit/appearance-customization)


https://developer.apple.com/documentation/uikit/animation-and-haptics)


https://developer.apple.com/documentation/uikit/windows-and-screens)


https://developer.apple.com/documentation/uikit/touches-presses-and-gestures)


https://developer.apple.com/documentation/uikit/menus-and-shortcuts)


https://developer.apple.com/documentation/uikit/drag-and-drop)


https://developer.apple.com/documentation/uikit/pointer-interactions)


https://developer.apple.com/documentation/uikit/apple-pencil-interactions)


https://developer.apple.com/documentation/uikit/focus-based-navigation)


https://developer.apple.com/documentation/uikit/accessibility-for-uikit)


https://developer.apple.com/documentation/uikit/images-and-pdf)


https://developer.apple.com/documentation/uikit/drawing)


https://developer.apple.com/documentation/uikit/printing)


https://developer.apple.com/documentation/uikit/text-display-and-fonts)


https://developer.apple.com/documentation/uikit/textkit)


https://developer.apple.com/documentation/uikit/keyboards-and-input)


https://developer.apple.com/documentation/uikit/writing-tools)


https://developer.apple.com/documentation/uikit/handwriting-recognition)


https://developer.apple.com/documentation/uikit/deprecated-symbols)


https://developer.apple.com/documentation/uikit/uikit-enumerations)


https://developer.apple.com/documentation/uikit/uikit-constants)


https://developer.apple.com/documentation/uikit/uikit-data-types)


https://developer.apple.com/documentation/uikit/uikit-functions)


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument

  • UIKit
  • UIDocument

Class

UIDocument

An abstract base class for managing discrete portions of your apps data.

@MainActor class UIDocument

Mentioned in

Customizing a document-based apps launch experience

About App Development with UIKit

Overview

Apps that make use of UIDocument and its underlying architecture get many benefits for their documents:

  • Asynchronous reading and writing of data on a background queue, meaning your apps responsiveness is unaffected while reading and writing operations take place

  • Coordinated reading and writing of document files automatically integrated with cloud services

  • Support for discovering conflicts between different versions of a document

  • Safe-saving of document data by writing data first to a temporary file and then replacing the current document file with it

  • Automatic saving of document data at opportune moments and support for dealing with suspend behaviors

In the Model-View-Controller design pattern, a UIDocument object is a model object or model-controller object — it manages the data of a document or the aggregate model objects that together constitute the documents data. You typically pair it with a view controller that manages the view presenting the documents contents. UIDocument provides no direct support for managing document views, but view controllers that subclass UIDocumentViewController can present a UIDocument, and view controllers that subclass UIDocumentBrowserViewController can organize and display UIDocument collections.

Document-based apps include those that can generate multiple documents, each with its own file-system location. A document-based app must create a subclass of UIDocument for its documents.

The primary attribute of a document in the UIDocument architecture is its file URL. When you initialize an instance of your document subclass by calling init(fileURL:), you must pass a file URL locating the document file in the app sandbox. UIDocument determines the file type (the Uniform Type Identifier associated with the file extension) and the document name (the filename component) from the file URL. You can override the accessor methods of the fileType and localizedName properties to supply different values.

The following outlines the life cycle of a typical document:

  1. You create a new document or open an existing document.
  • To create a new document, allocate and initialize an instance of your subclass and then call save(to:for:completionHandler:) on the instance.

  • To open an existing document (selected by the user), allocate and initialize an instance of your subclass and then call open(completionHandler:) on the instance.

  1. The user edits the document. As the user edits, track changes to the document. UIDocument periodically notes when there are unsaved changes and writes the document data to its file.

  2. The user requests that the document be integrated with cloud services (optional). You must enable the document for cloud storage. You must also resolve any conflicts between different versions of the same document.

  3. The user closes the document. Call close(completionHandler:) on the document instance. UIDocument saves the document if there are any unsaved changes.

A typical document-based app calls open(completionHandler:), close(completionHandler:), and save(to:for:completionHandler:) on the main thread. When the read or save operation kicked off by these methods concludes, the system executes the completion-handler block on the same dispatch queue as the system used to invoke the method, allowing you to complete any tasks contingent on the read or save operation. If the operation isnt successful, the system passes false to the completion-handler block.

Implement the NSFilePresenter protocol

The UIDocument class adopts the NSFilePresenter protocol. When another client attempts to read the document of a UIDocument-based app, the system suspends reading until the system provides the UIDocument object an opportunity to save any changes made to the document.

Although some implementations do nothing, UIDocument implements all NSFilePresenter methods. Specifically, UIDocument:

  • Implements relinquishPresentedItem(toReader:) to forward the incoming block to performAsynchronousFileAccess(_:)

  • Implements relinquishPresentedItem(toWriter:) to check if the file-modification date changed; if the file is newer than before, it calls revert(toContentsOf:completionHandler:) with the value of the fileURL as the URL parameter

  • Implements presentedItemDidMove(to:) to update the documents file URL ( fileURL)

In your UIDocument subclass, if you override a NSFilePresenter method, you can always invoke the superclass implementation ( super).

Create a subclass

Each document-based app must create a subclass of UIDocument whose instances represent its documents. The subclassing requirements for most apps are simple:

  • For writing operations, implement the contents(forType:) method to provide a snapshot of document data. The data must be in the form of an NSData object (for flat files) or an FileWrapper object (for file packages). Writing operations are usually initiated through the autosave feature.

  • For reading operations, implement the load(fromContents:ofType:) method to receive an NSData or FileWrapper object and initialize the apps data structures with it.

  • Implement change tracking to enable the autosaving feature. See Track changes for details.

  • When cloud services are enabled for a document, resolve conflicts between different versions of a document. See Resolve conflicts and handle errors for details.

The system typically calls the contents(forType:) and load(fromContents:ofType:) methods on the main queue. More specifically:

  • The system calls the contents(forType:) method on the queue that the system called the save(to:for:completionHandler:) method on; writing of data takes place on a background thread.

  • The system calls the load(fromContents:ofType:) method on the queue that the system called the open(completionHandler:) method on.

If you have special requirements for reading and writing document data for which the contents(forType:) and load(fromContents:ofType:) methods wont suffice, you can override other methods of the UIDocument class. See Override input and output methods for a discussion of these requirements and methods.

Track changes

To enable the autosaving feature of UIDocument, you must notify it when users make changes to a document. UIDocument periodically checks whether the hasUnsavedChanges method returns true; if it does, it initiates the save operation for the document.

There are two primary ways to implement change tracking in your UIDocument subclass:

  • Call the methods of the UndoManager class to implement undo and redo for the document. You can access the default UndoManager object from the undoManager property. This is the preferred approach, especially for existing apps that already support undo and redo.

  • Call the updateChangeCount(_:) method at the appropriate junctures in your code.

Resolve conflicts and handle errors

A UIDocument object has a specific state at any moment in its life cycle. You can check the current state by querying the documentState property, and get notified about changes by observing the stateChangedNotification notification.

If the owner enables a document for iCloud, its important to check for conflicting versions and to attempt to resolve conflicts. Listen for the stateChangedNotification notification and then checking if the document state is inConflict. This state indicates that there are conflicting versions of the document, which you can access by calling the NSFileVersion class method unresolvedConflictVersionsOfItem(at:), passing in the documents file URL. If you can resolve a conflict correctly without user interaction, do so. Otherwise, discretely notify the user that a conflict exists and let them choose how to resolve it. Possible approaches include:

  • Display the conflicting versions, from which a user can pick one or both versions to keep.

  • Display a merged version and giving the user an option to pick it.

  • Display the file modification dates and giving the user the option to choose one or both.

Document state, in addition to indicating an inter-file conflict, can indicate errors. For example, closed indicates an error in reading, and savingError indicates an error in saving or reverting a document. The system notifies your app of reading and writing errors through the success parameter passed into the completion handlers of the open(completionHandler:), close(completionHandler:), revert(toContentsOf:completionHandler:), and save(to:for:completionHandler:) methods.

You can handle errors by calling or implementing the handleError(_:userInteractionPermitted:) method; the default implementations of the open(completionHandler:) and save(to:for:completionHandler:) methods call handleError(_:userInteractionPermitted:) when a UIDocument object encounters a reading or writing error, respectively. You can handle read, save, and reversion errors by informing the user and, if the situation permits, trying to recover from the error.

Be sure to read the description for the contents(forType:) method for its guidance on handling errors encountered during document saving.

Override input and output methods

If you app has special requirements for reading or writing document data, it can override methods of UIDocument other than load(fromContents:ofType:) and contents(forType:). These requirements often include the following:

  • Incremental reading and writing of large data files

Override the read(from:) and writeContents(_:to:for:originalContentsURL:) methods, respectively.

  • Custom representations of document data (that is, not an NSData or FileWrapper object)

Override the read(from:) method when reading document data and the writeContents(_:to:for:originalContentsURL:) method when writing document data.

  • Performing actions before or after reading or writing data

Override open(completionHandler:) and save(to:for:completionHandler:).

  • A custom approach to safe-saving

Override the writeContents(_:andAttributes:safelyTo:for:) method.

  • Changing the file type of a document before its saved

Override the savingFileType method to return a file type other than the default ( fileType). An example of this is an RTF document which, after a user adds an image to it, should be saved as an RTFD document.

If you override these methods, be aware that all reading and writing of document data must be done on a background queue and must be coordinated with other attempts to read from and write to the same document file. Because of this, you usually call the superclass implementation ( super) as part of your override, and if you call other UIDocument methods, you usually invoke them in the block passed into a call of the performAsynchronousFileAccess(_:) method. Read the method descriptions for details.

Access document attributes

If you override any of the document-attribute properties (listed under Accessing document attributes) by overriding the related accessor methods, be aware that the UIKit framework can call these accessor methods on a background thread. Thus your overriding implementation must be thread safe.

Rename documents

UIDocument provides support for changing the documents title. Security considerations require that clients cant programmatically rename a file on the file system, and that the system confirms that a person intends to rename their file. To satisfy these restrictions, the system, instead of your app, presents a renaming user interface using a process outside your app. The external process renames the underlying file and reports the new location and handles the rename request internally when a person invokes renaming from the title menu. If youre using UIDocumentViewController, it automatically configures renaming for you. Otherwise, you manually assign the document as the navigation items renameDelegate.

init(document: MyDocument) { self.document = document super.init(nibName:nil, bundle: nil) self.navigationItem.renameDelegate = document }

The Rename action appears in the title menu as one of the system-suggested actions. When a person taps the Rename action, the system shows an inline text field for changing the navigation items title. Upon renaming the item, the system changes the file name in storage as though the person renamed the file in another application.

Prior to iOS 17, to enable the system rename user interface, a client view controller adopts the UINavigationItemRenameDelegate protocol and assigns itself as the navigation items renameDelegate. Its the clients responsibility to implement callbacks such as navigationItem(_:didEndRenamingWith:) (Swift) or navigationItem:didEndRenamingWithTitle: (Objective-C) to explicitly move the file in storage.

class EditorViewController: UIViewController, UINavigationItemRenameDelegate {

override func viewDidLoad() { super.viewDidLoad() navigationItem.renameDelegate = self }

func navigationItem(_ navigationItem: UINavigationItem, didEndRenamingWith: title: String) { // Move the file, update the model, and so on. } }

Topics

Initializing a document object

init(fileURL: URL)

Returns a document object initialized with its file-system location.

Accessing document attributes

var fileURL: URL

The file URL you use to initialize the document.

var localizedName: String

The localized name of the document.

var fileType: String?

The file type of the document.

var fileModificationDate: Date?

The date and time your app last modified the document file.

var documentState: UIDocument.State

The current state of the document.

var progress: Progress?

The upload or download progress of a document.

Writing document data

Asynchronously closes the document after saving any changes.

Returns the document data to be saved.

Saves document data to the specified location in the application sandbox.

func writeContents(Any, andAttributes: [AnyHashable : Any]?, safelyTo: URL, for: UIDocument.SaveOperation) throws

Ensures that document data is written safely to a specified location in the application sandbox.

func writeContents(Any, to: URL, for: UIDocument.SaveOperation, originalContentsURL: URL?) throws

Writes the document data to disk at the sandbox location indicated by a file URL.

var savingFileType: String?

Returns the file type to use for saving a document.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.

Returns a file extension to append to the file URL of the document file being written.

Reading document data

Opens a document asynchronously.

func load(fromContents: Any, ofType: String?) throws

Loads the document data into the apps data model.

func read(from: URL) throws

Reads the document data in a file at a specified location in the application sandbox.

Creating new documents

struct CreationIntent

An app intent that creates new documents for your app.

Accessing document files asynchronously

Schedules a document-reading or document-writing operation on a concurrent background queue.

Reverting a document

Reverts a document to the most recent document data stored on-disk.

Disabling and enabling editing

func disableEditing()

Disables editing when its unsafe to make changes to a document.

func enableEditing()

Enables editing when its safe again to make changes to a document.

Tracking changes and autosaving

var hasUnsavedChanges: Bool

A Boolean value that indicates whether the document has any unsaved changes.

func updateChangeCount(UIDocument.ChangeKind)

Updates the change counter by indicating the kind of change.

var undoManager: UndoManager!

The undo manager for the document.

Returns a change token for a specific save operation.

func updateChangeCount(withToken: Any, for: UIDocument.SaveOperation)

Updates the change count with reference to a change-count token passed in by UIKit.

Initiates automatic saving of documents with unsaved changes.

Supporting user activities

var userActivity: NSUserActivity?

An object encapsulating a user activity supported by this document.

func restoreUserActivityState(NSUserActivity)

Restores the state needed to continue the given user activity.

func updateUserActivityState(NSUserActivity)

Updates the state of the given user activity.

Resolving conflicts and handling errors

func handleError(any Error, userInteractionPermitted: Bool)

Handles an error that occurs during an attempt to read, save, or revert a document.

func finishedHandlingError(any Error, recovered: Bool)

Tells UIKit that you finished handling the error.

func userInteractionNoLongerPermitted(forError: any Error)

Indicates when its no longer safe to proceed without immediately handling the error.

Constants

enum ChangeKind

Constants that specify the kind of change to a document.

enum SaveOperation

Constants that specify the type of save operation.

struct State

Constants that specify the document state.

class let userActivityURLKey: String

The key that identifies the document associated with a user activity.

Notifications

class let stateChangedNotification: NSNotification.Name

A notification the document object posts when theres a change in the state of the document.

Structures

struct StateChangedMessage Beta

Relationships

Inherits From

  • NSObject

Inherited By

  • UIManagedDocument

Conforms To

  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSFilePresenter
  • NSObjectProtocol
  • ProgressReporting
  • Sendable
  • UIUserActivityRestoring

See Also

Documents

class UIManagedDocument

A managed document object that integrates with Core Data.

Synchronizing documents in the iCloud environment

Manage documents across multiple devices to create a seamless editing and collaboration experience.


https://developer.apple.com/documentation/uikit/uiview

  • UIKit
  • UIView

Class

UIView

An object that manages the content for a rectangular area on the screen.

tvOS

@MainActor class UIView

Mentioned in

Using responders and the responder chain to handle events

Customizing a document-based apps launch experience

Customizing drawings

Implementing a Multi-Touch app

Making a view into a drag source

Overview

Views are the fundamental building blocks of your apps user interface, and the UIView class defines the behaviors that are common to all views. A view object renders content within its bounds rectangle, and handles any interactions with that content. The UIView class is a concrete class that you can instantiate and use to display a fixed background color. You can also subclass it to draw more sophisticated content. To display labels, images, buttons, and other interface elements commonly found in apps, use the view subclasses that the UIKit framework provides rather than trying to define your own.

Because view objects are the main way your application interacts with the user, they have a number of responsibilities. Here are just a few:

  • Drawing and animation

  • Views draw content in their rectangular area using UIKit or Core Graphics.

  • You can animate some view properties to new values.

  • Layout and subview management

  • Views may contain zero or more subviews.

  • Views can adjust the size and position of their subviews.

  • Use Auto Layout to define the rules for resizing and repositioning your views in response to changes in the view hierarchy.

  • Event handling

  • A view is a subclass of UIResponder and can respond to touches and other types of events.

  • Views can install gesture recognizers to handle common gestures.

Views can nest inside other views to create view hierarchies, which offer a convenient way to organize related content. Nesting a view creates a parent-child relationship between the nested child view (known as the subview) and the parent (known as the superview). A parent view may contain any number of subviews, but each subview has only one superview. By default, when a subviews visible area extends outside of the bounds of its superview, no clipping of the subviews content occurs. Use the clipsToBounds property to change that behavior.

The frame and bounds properties define the geometry of each view. The frame property defines the origin and dimensions of the view in the coordinate system of its superview. The bounds property defines the internal dimensions of the view as it sees them, and its use is almost exclusive to custom drawing code. The center property provides a convenient way to reposition a view without changing its frame or bounds properties directly.

For detailed information about how to use the UIView class, see View Programming Guide for iOS.

Create a view

Normally, you create views in your storyboards by dragging them from the library to your canvas. You can also create views programmatically. When creating a view, you typically specify its initial size and position relative to its future superview. For example, the following example creates a view and places its top-left corner at the point (10, 10) in the superviews coordinate system (once it is added to that superview).

let rect = CGRect(x: 10, y: 10, width: 100, height: 100) let myView = UIView(frame: rect)

CGRect viewRect = CGRectMake(10, 10, 100, 100); UIView* myView = [[UIView alloc] initWithFrame:viewRect];

To add a subview to another view, call the addSubview(_:) method on the superview. You may add any number of subviews to a view, and sibling views may overlap each other without any issues in iOS. Each call to the addSubview(_:) method places the new view on top of all other siblings. You can specify the relative z-order of subview by adding it using the insertSubview(_:aboveSubview:) and insertSubview(_:belowSubview:) methods. You can also exchange the position of already added subviews using the exchangeSubview(at:withSubviewAt:) method.

After creating a view, create Auto Layout rules to govern how the size and position of the view change in response to changes in the rest of the view hierarchy. For more information, see Auto Layout Guide.

Draw views

View drawing occurs on an as-needed basis. When a view is first shown, or when all or part of it becomes visible due to layout changes, the system asks the view to draw its contents. For views that contain custom content using UIKit or Core Graphics, the system calls the views draw(_:) method. Your implementation of this method is responsible for drawing the views content into the current graphics context, which is set up by the system automatically prior to calling this method. This creates a static visual representation of your views content that can then be displayed on the screen.

When the actual content of your view changes, its your responsibility to notify the system that your view needs to be redrawn. You do this by calling your views setNeedsDisplay() or setNeedsDisplay(_:) method of the view. These methods let the system know that it should update the view during the next drawing cycle. Because it waits until the next drawing cycle to update the view, you can call these methods on multiple views to update them at the same time.

For detailed information about the view drawing cycle and the role your views have in this cycle, see View Programming Guide for iOS.

Animate views

Changes to several view properties can be animated — that is, changing the property creates an animation starting at the current value and ending at the new value that you specify. The following properties of the UIView class are animatable:

  • frame

  • bounds

  • center

  • transform

  • alpha

  • backgroundColor

To animate your changes, create a UIViewPropertyAnimator object and use its handler block to change the values of your views properties. The UIViewPropertyAnimator class lets you specify the duration and timing of your animations, but it performs the actual animations. You can pause a property-based animator thats currently running to interrupt the animation and drive it interactively. For more information, see UIViewPropertyAnimator.

Threading considerations

Manipulations to your apps user interface must occur on the main thread. Thus, you should always call the methods of the UIView class from code running in the main thread of your app. The only time this may not be strictly necessary is when creating the view object itself, but all other manipulations should occur on the main thread.

Subclassing notes

The UIView class is a key subclassing point for visual content that also requires user interactions. Although there are many good reasons to subclass UIView, it is recommended that you do so only when the basic UIView class or the standard system views do not provide the capabilities that you need. Subclassing requires more work on your part to implement the view and to tune its performance.

For information about ways to avoid subclassing, see Alternatives to subclassing.

Methods to override

When subclassing UIView, there are only a handful of methods you should override and many methods that you might override depending on your needs. Because UIView is a highly configurable class, there are also many ways to implement sophisticated view behaviors without overriding custom methods, which are discussed in the Alternatives to Subclassing section. In the meantime, the following list includes the methods you might consider overriding in your UIView subclasses:

  • Initialization:

  • init(frame:) - It is recommended that you implement this method. You can also implement custom initialization methods in addition to, or instead of, this method.

  • doc://com.apple.documentation/documentation/oslog/oslogentry/init(coder:) - Implement this method if you load your view from storyboards or nib files and your view requires custom initialization.

  • layerClass Use this property only if you want your view to use a different Core Animation layer for its backing store. For example, if your view uses tiling to display a large scrollable area, you might want to set the property to the CATiledLayer class.

  • Drawing and printing:

  • draw(_:) - Implement this method if your view draws custom content. If your view does not do any custom drawing, avoid overriding this method.

  • draw(_:for:) - Implement this method only if you want to draw your views content differently during printing.

  • Layout and Constraints:

  • requiresConstraintBasedLayout Use this property if your view class requires constraints to work properly.

  • updateConstraints() - Implement this method if your view needs to create custom constraints between your subviews.

  • alignmentRect(forFrame:), frame(forAlignmentRect:) - Implement these methods to override how your views are aligned to other views.

  • didAddSubview(_:), willRemoveSubview(_:) - Implement these methods as needed to track the additions and removals of subviews.

  • willMove(toSuperview:), didMoveToSuperview() - Implement these methods as needed to track the movement of the current view in your view hierarchy.

  • Event Handling:

  • gestureRecognizerShouldBegin(_:) - Implement this method if your view handles touch events directly and might want to prevent attached gesture recognizers from triggering additional actions.

  • touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), touchesCancelled(_:with:) - Implement these methods if you need to handle touch events directly. (For gesture-based input, use gesture recognizers.)

Alternatives to subclassing

Many view behaviors can be configured without the need for subclassing. Before you start overriding methods, consider whether modifying the following properties or behaviors would provide the behavior you need.

  • addConstraint(_:) - Define automatic layout behavior for the view and its subviews.

  • autoresizingMask - Provides automatic layout behavior when the superviews frame changes. These behaviors can be combined with constraints.

  • contentMode - Provides layout behavior for the views content, as opposed to the frame of the view. This property also affects how the content is scaled to fit the view and whether it is cached or redrawn.

  • isHidden or alpha - Change the transparency of the view as a whole rather than hiding or applying alpha to your views rendered content.

  • backgroundColor - Set the views color rather than drawing that color yourself.

  • Subviews - Rather than draw your content using a draw(_:) method, embed image and label subviews with the content you want to present.

  • Gesture recognizers - Rather than subclass to intercept and handle touch events yourself, you can use gesture recognizers to send an action to a target object.

  • Animations - Use the built-in animation support rather than trying to animate changes yourself. The animation support provided by Core Animation is fast and easy to use.

  • Image-based backgrounds - For views that display relatively static content, consider using a UIImageView object with gesture recognizers instead of subclassing and drawing the image yourself. Alternatively, you can also use a generic UIView object and assign your image as the content of the views CALayer object.

Animations are another way to make visible changes to a view without requiring you to subclass and implement complex drawing code. Many properties of the UIView class are animatable, which means changes to those properties can trigger system-generated animations. Starting animations requires as little as one line of code to indicate that any changes that follow should be animated. For more information about animation support for views, see Animate views.

Topics

Creating a view object

init(frame: CGRect)

Creates a view with the specified frame rectangle.

init?(coder: NSCoder)

Creates a view from data in an unarchiver.

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.

var isUserInteractionEnabled: Bool

A Boolean value that determines whether user events are ignored and removed from the event queue.

var isMultipleTouchEnabled: Bool

A Boolean value that indicates whether the view receives more than one touch at a time.

var isExclusiveTouch: Bool

A Boolean value that indicates whether the receiver handles touch events exclusively.

Configuring the bounds and frame rectangles

var frame: CGRect

The frame rectangle, which describes the views location and size in its superviews coordinate system.

var bounds: CGRect

The bounds rectangle, which describes the views location and size in its own coordinate system.

var center: CGPoint

The center point of the views frame rectangle.

var transform: CGAffineTransform

Specifies the transform applied to the view, relative to the center of its bounds.

var transform3D: CATransform3D

The three-dimensional transform to apply to the view.

var anchorPoint: CGPoint

The anchor point of the views bounds rectangle.

Managing the view hierarchy

var superview: UIView?

The receivers superview, or nil if it has none.

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func sendSubviewToBack(UIView)

Moves the specified subview so that it appears behind its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.

func didAddSubview(UIView)

Tells the view that a subview was added.

func willRemoveSubview(UIView)

Tells the view that a subview is about to be removed.

func willMove(toSuperview: UIView?)

Tells the view that its superview is about to change to the specified superview.

func didMoveToSuperview()

Tells the view that its superview changed.

func willMove(toWindow: UIWindow?)

Tells the view that its window object is about to change.

func didMoveToWindow()

Tells the view that its window object changed.

Observing trait changes

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

Requesting trait updates

func updateTraitsIfNeeded()

Overriding trait values

var traitOverrides: UITraitOverrides

struct UITraitOverrides

Configuring content margins

Positioning content within layout margins

Position views so that they arent crowded by other content.

var directionalLayoutMargins: NSDirectionalEdgeInsets

The default spacing to use when laying out content in a view, taking into account the current language direction.

var layoutMargins: UIEdgeInsets

The default spacing to use when laying out content in the view.

var preservesSuperviewLayoutMargins: Bool

A Boolean value indicating whether the current view also respects the margins of its superview.

func layoutMarginsDidChange()

Notifies the view that the layout margins changed.

Getting the safe area

Positioning content relative to the safe area

Position views so that they arent obstructed by other content.

var safeAreaInsets: UIEdgeInsets

The insets that you use to determine the safe area for this view.

var safeAreaLayoutGuide: UILayoutGuide

The layout guide representing the portion of your view that is unobscured by bars and other content.

func safeAreaInsetsDidChange()

Called when the safe area of the view changes.

var insetsLayoutMarginsFromSafeArea: Bool

A Boolean value indicating whether the views layout margins are updated automatically to reflect the safe area.

Managing the views constraints

Adjust the size and position of the view using Auto Layout constraints.

var constraints: [NSLayoutConstraint]

The constraints held by the view.

func addConstraint(NSLayoutConstraint)

Adds a constraint on the layout of the receiving view or its subviews.

func addConstraints([NSLayoutConstraint])

Adds multiple constraints on the layout of the receiving view or its subviews.

func removeConstraint(NSLayoutConstraint)

Removes the specified constraint from the view.

func removeConstraints([NSLayoutConstraint])

Removes the specified constraints from the view.

Creating constraints using layout anchors

Attach Auto Layout constraints to one of the views anchors.

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.

Working with layout guides

func addLayoutGuide(UILayoutGuide)

Adds the specified layout guide to the view.

var layoutGuides: [UILayoutGuide]

The array of layout guide objects owned by this view.

var layoutMarginsGuide: UILayoutGuide

A layout guide representing the views margins.

var readableContentGuide: UILayoutGuide

A layout guide representing an area with a readable width within the view.

func removeLayoutGuide(UILayoutGuide)

Removes the specified layout guide from the view.

Measuring in Auto Layout

Returns the optimal size of the view based on its current constraints.

Returns the optimal size of the view based on its constraints and the specified fitting priorities.

var intrinsicContentSize: CGSize

The natural size for the receiving view, considering only properties of the view itself.

func invalidateIntrinsicContentSize()

Invalidates the views intrinsic content size.

Returns the priority with which a view resists being made smaller than its intrinsic size.

func setContentCompressionResistancePriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made smaller than its intrinsic size.

Returns the priority with which a view resists being made larger than its intrinsic size.

func setContentHuggingPriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made larger than its intrinsic size.

Aligning views in Auto Layout

Returns the views alignment rectangle for a given frame.

Returns the views frame for a given alignment rectangle.

var alignmentRectInsets: UIEdgeInsets

The insets from the views frame that define its alignment rectangle.

var forFirstBaselineLayout: UIView

Returns a view used to satisfy first baseline constraints.

var forLastBaselineLayout: UIView

Returns a view used to satisfy last baseline constraints.

Triggering Auto Layout

A Boolean value that determines whether the views constraints need updating.

func setNeedsUpdateConstraints()

Controls whether the views constraints need updating.

func updateConstraints()

Updates constraints for the view.

func updateConstraintsIfNeeded()

Updates the constraints for the receiving view and its subviews.

Debugging Auto Layout

Returns the constraints impacting the layout of the view for a given axis.

var hasAmbiguousLayout: Bool

A Boolean value that determines whether the constraints impacting the layout of the view incompletely specify the location of the view.

func exerciseAmbiguityInLayout()

Randomly changes the frame of a view with an ambiguous layout between the different valid values.

Configuring the resizing behavior

Define how a view adjusts its content when its bounds change.

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

enum ContentMode

Options to specify how a view adjusts its content when its size changes.

Asks the view to calculate and return the size that best fits the specified size.

func sizeToFit()

Resizes and moves the receiver view so it just encloses its subviews.

var autoresizesSubviews: Bool

A Boolean value that determines whether the receiver automatically resizes its subviews when its bounds change.

var autoresizingMask: UIView.AutoresizingMask

An integer bit mask that determines how the receiver resizes itself when its superviews bounds change.

Laying out subviews

Lay out views manually if your app doesnt use Auto Layout.

func layoutSubviews()

Lays out subviews.

func setNeedsLayout()

Invalidates the current layout of the receiver and triggers a layout update during the next update cycle.

func layoutIfNeeded()

Lays out the subviews immediately, if layout updates are pending.

class var requiresConstraintBasedLayout: Bool

A Boolean value that indicates whether the receiver depends on the constraint-based layout system.

var translatesAutoresizingMaskIntoConstraints: Bool

A Boolean value that determines whether the views autoresizing mask is translated into Auto Layout constraints.

Accessing insets and layout guides

struct LayoutRegion

Adjusting the user interface

var overrideUserInterfaceStyle: UIUserInterfaceStyle

The user interface style adopted by the view and all of its subviews.

var semanticContentAttribute: UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.

var effectiveUserInterfaceLayoutDirection: UIUserInterfaceLayoutDirection

The user interface layout direction appropriate for arranging the immediate content of the view.

Returns the user interface direction for the given semantic content attribute.

Returns the layout direction implied by the specified semantic content attribute, relative to the specified layout direction.

Constraining views to the keyboard

var keyboardLayoutGuide: UIKeyboardLayoutGuide

A layout guide that tracks the keyboards position in your apps layout.

Adding and removing interactions

func addInteraction(any UIInteraction)

Adds an interaction to the view.

func removeInteraction(any UIInteraction)

Removes an interaction from the view.

var interactions: [any UIInteraction]

The array of interactions for the view.

protocol UIInteraction

The protocol that an interaction implements to access the view that owns it.

Drawing and updating the view

func draw(CGRect)

Draws the views image within the passed-in rectangle.

func setNeedsDisplay()

Marks the receivers entire bounds rectangle as needing to be redrawn.

func setNeedsDisplay(CGRect)

Marks the specified rectangle of the receiver as needing to be redrawn.

var contentScaleFactor: CGFloat

The scale factor applied to the view.

func tintColorDidChange()

Called by the system when the tint color property changes.

Updating the view when property values change

struct Invalidating

A property wrapper that notifies the system that a property value change has invalidated an aspect of the containing view.

protocol UIViewInvalidating

Implements a type of invalidation that can occur on a view that requires an update.

Formatting printed view content

Returns a print formatter for the receiving view.

func draw(CGRect, for: UIViewPrintFormatter)

Implemented to draw the views content for printing.

Managing gesture recognizers

func addGestureRecognizer(UIGestureRecognizer)

Attaches a gesture recognizer to the view.

func removeGestureRecognizer(UIGestureRecognizer)

Detaches a gesture recognizer from the receiving view.

var gestureRecognizers: [UIGestureRecognizer]?

The gesture-recognizer objects currently attached to the view.

Asks the view if the gesture recognizer should continue tracking touch events.

Working with focus

var canBecomeFocused: Bool

A Boolean value that indicates whether the view is currently capable of being focused.

class var inheritedAnimationDuration: TimeInterval

Returns the inherited duration of the current animation.

var isFocused: Bool

A Boolean value that indicates whether the item is currently focused.

var focusGroupIdentifier: String?

The identifier of the focus group that this view belongs to.

var focusEffect: UIFocusEffect?

The visual effect to apply when the view becomes focused.

var focusGroupPriority: UIFocusGroupPriority

The importance of the item within a focus group, used by the focus system to determine the groups primary item.

Using motion effects

func addMotionEffect(UIMotionEffect)

Begins applying a motion effect to the view.

var motionEffects: [UIMotionEffect]

The array of motion effects for the view.

func removeMotionEffect(UIMotionEffect)

Stops applying a motion effect to the view.

Managing the hover appearance

var hoverStyle: UIHoverStyle?

The hover style for the view.

class UIHoverStyle

The hover style to apply to a view, including an effect and a shape to use for displaying that effect.

class UIHoverEffectLayer

Managing font-sizing preferences

var minimumContentSizeCategory: UIContentSizeCategory?

The minimum content size category for the view and its subviews.

var maximumContentSizeCategory: UIContentSizeCategory?

The maximum content size category for the view and its subviews.

var appliedContentSizeCategoryLimitsDescription: String

A string that lists each of the views superviews, its content size category, and whether that view has content size category limits.

Preserving and restoring state

var restorationIdentifier: String?

The identifier that determines whether the view supports state restoration.

func encodeRestorableState(with: NSCoder)

Encodes state-related information for the view.

func decodeRestorableState(with: NSCoder)

Decodes and restores state-related information for the view.

Capturing a view snapshot

Returns a snapshot view based on the contents of the current view.

Returns a snapshot view based on the specified contents of the current view, with stretchable insets.

Renders a snapshot of the complete view hierarchy as visible onscreen into the current context.

Identifying the view at runtime

var tag: Int

An integer that you can use to identify view objects in your application.

Returns the view whose tag matches the specified value.

Converting between view coordinate systems

Converts a point from the receivers coordinate system to that of the specified view.

Converts a point from the coordinate system of a given view to that of the receiver.

Converts a rectangle from the receivers coordinate system to that of another view.

Converts a rectangle from the coordinate system of another view to that of the receiver.

Hit-testing in a view

Returns the farthest descendant in the view hierarchy of the current view, including itself, that contains the specified point.

Returns a Boolean value indicating whether the receiver contains the specified point.

Ending a view-editing session

Causes the view (or one of its embedded text fields) to resign the first responder status.

Modifying the accessibility behavior

var accessibilityIgnoresInvertColors: Bool

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

var largeContentImage: UIImage?

An image that represents the view in the large content viewer.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

var largeContentTitle: String?

A string that describes the view in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.

var showsLargeContentViewer: Bool

A Boolean value that indicates whether to show the view in the large content viewer.

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.

Constants

enum AnimationCurve

Specifies the supported animation curves.

struct AnimationOptions

Options for animating views using block objects.

enum AnimationTransition

Animation transition options for use in an animation block object.

enum SystemAnimation

Option to remove the views from the hierarchy when animation is complete.

struct KeyframeAnimationOptions

Options for configuring keyframe-based animations.

enum Axis

Keys that specify a horizontal or vertical layout constraint between objects.

enum TintAdjustmentMode

The tint adjustment mode for the view.

class let layoutFittingCompressedSize: CGSize

The option to use the smallest possible size.

class let layoutFittingExpandedSize: CGSize

The option to use the largest possible size.

class let noIntrinsicMetric: CGFloat

The absence of an intrinsic metric for a given numeric view property.

struct AutoresizingMask

Options for automatic view resizing.

enum UISemanticContentAttribute

Deprecated

Symbols that views no longer support.

Initializers

convenience init()

Instance Methods

func setNeedsUpdateProperties()

Call to manually request a properties update for the view. Multiple requests may be coalesced into a single update alongside the next layout pass.

Beta

func updateProperties()

Override point for subclasses to update properties of this view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

func updatePropertiesIfNeeded()

Forces an immediate properties update for this view (and its view controller, if applicable) and any subviews, including any view controllers or views in its subtree.

Enumerations

enum Invalidations

Changes that cause an aspect of a view to be invalid and require an update.

Relationships

Inherits From

  • UIResponder

Inherited By

  • UIActionSheet
  • UIActivityIndicatorView
  • UIAlertView
  • UIBackgroundExtensionView
  • UICalendarView
  • UICollectionReusableView
  • UIContentUnavailableView
  • UIControl
  • UIEventAttributionView
  • UIImageView
  • UIInputView
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIScrollView
  • UISearchBar
  • UIStackView
  • UIStandardTextCursorView
  • UITabBar
  • UITableViewCell
  • UITableViewHeaderFooterView
  • UIToolbar
  • UIVisualEffectView
  • UIWebView
  • UIWindow

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

View fundamentals

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.


https://developer.apple.com/documentation/uikit/uiapplication

  • UIKit
  • UIApplication

Class

UIApplication

The centralized point of control and coordination for apps running in iOS.

tvOS

@MainActor class UIApplication

Mentioned in

Using responders and the responder chain to handle events

About the app launch sequence

About App Development with UIKit

Handling key presses made on a physical keyboard

About the UI preservation process

Overview

Every iOS app has exactly one instance of UIApplication (or, very rarely, a subclass of UIApplication). When an app launches, the system calls the UIApplicationMain(_:_:_:_:) function. Among its other tasks, this function creates a singleton UIApplication object that you access using shared.

Your apps application object handles the initial routing of incoming user events. It dispatches action messages forwarded to it by control objects (instances of the UIControl class) to appropriate target objects. The application object maintains a list of open windows ( UIWindow objects), which it can use to retrieve any of the apps UIView objects.

The UIApplication class defines a delegate that conforms to the UIApplicationDelegate protocol and must implement some of the protocols methods. The application object informs the delegate of significant runtime events—for example, app launch, low-memory warnings, and app termination—giving it an opportunity to respond appropriately.

Apps can cooperatively handle a resource, such as an email or an image file, through the open(_:options:completionHandler:) method. For example, an app that calls this method with an email URL causes the Mail app to launch and display the message.

The APIs in this class allow you to manage device-specific behavior. Use your UIApplication object to do the following:

  • Temporarily suspend incoming touch events ( beginIgnoringInteractionEvents())

  • Register for remote notifications ( registerForRemoteNotifications())

  • Trigger the undo-redo UI ( applicationSupportsShakeToEdit)

  • Determine whether there is an installed app registered to handle a URL scheme ( canOpenURL(_:))

  • Extend the execution of the app so that it can finish a task in the background ( beginBackgroundTask(expirationHandler:) and beginBackgroundTask(withName:expirationHandler:))

  • Schedule and cancel local notifications ( scheduleLocalNotification(_:) and cancelLocalNotification(_:))

  • Coordinate the reception of remote-control events ( beginReceivingRemoteControlEvents() and endReceivingRemoteControlEvents())

  • Perform app-level state restoration tasks (methods in the Managing state restoration task group)

Subclassing notes

Most apps dont need to subclass UIApplication. Instead, use an app delegate to manage interactions between the system and the app.

If your app must handle incoming events before the system does—a very rare situation—you can implement a custom event or action dispatching mechanism. To do this, subclass UIApplication and override the sendEvent(_:) and/or the sendAction(_:to:from:for:) methods. For every event you intercept, after you handle the event, dispatch it

Accessing the shared application

class var shared: UIApplication

The singleton app instance.

Configuring your apps behavior

var delegate: (any UIApplicationDelegate)?

The delegate of the app object.

protocol UIApplicationDelegate

A set of methods to manage shared behaviors for your app.

Registering for remote notifications

func registerForRemoteNotifications()

Registers to receive remote notifications through Apple Push Notification service.

func unregisterForRemoteNotifications()

Unregisters for all remote notifications received through Apple Push Notification service.

var isRegisteredForRemoteNotifications: Bool

A Boolean value that indicates whether the app is currently registered for remote notifications.

Getting the application state

var applicationState: UIApplication.State

The apps current state, or that of its most active scene.

enum State

Constants that indicate the running states of an app.

Getting scene information

var supportsMultipleScenes: Bool

A Boolean value that indicates whether the app may display multiple scenes simultaneously.

The apps currently connected scenes.

The sessions whose scenes are either currently active or archived by the system.

Managing a scenes life cycle

Asks the system to activate an existing scene or create a new scene and associate it with your app.

Asks the system to dismiss an existing scene and remove it from the app switcher.

func requestSceneSessionRefresh(UISceneSession)

Asks the system to update any system UI associated with the specified scene.

struct UISceneSessionActivationRequest

A collection of properties that you use to request activation of a scene.

class ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.

Fetching content in the background

class let backgroundFetchIntervalMinimum: TimeInterval

The smallest fetch interval supported by the system.

class let backgroundFetchIntervalNever: TimeInterval

A fetch interval large enough to prevent fetch operations from occurring.

Opening a URL resource

Attempts to asynchronously open the resource at the specified URL.

Returns a Boolean value that indicates whether an app is available to handle a URL scheme.

struct OpenExternalURLOptionsKey

Options for opening a URL.

Deep linking to custom settings

class let openSettingsURLString: String

The URL string you use to deep link to your apps custom settings in the Settings app.

static let openNotificationSettingsURLString: String

The URL string you use to deep link to your apps notification settings in the Settings app.

let UIApplicationOpenNotificationSettingsURLString: String

A constant that provides the URL string you use to deep link to your apps notification settings in the Settings app.

Deprecated

class let openDefaultApplicationsSettingsURLString: String

The URL string used to select a default app in the Settings app.

Managing the apps idle timer

var isIdleTimerDisabled: Bool

A Boolean value that controls whether the idle timer is disabled for the app.

Managing state restoration

func extendStateRestoration()

Tells the app that your code is restoring state asynchronously.

func completeStateRestoration()

Tells the app that your code has finished any asynchronous state restoration.

func ignoreSnapshotOnNextApplicationLaunch()

Prevents the app from using the recent snapshot image during the next launch cycle.

class func registerObject(forStateRestoration: any UIStateRestoring, restorationIdentifier: String)

Registers a custom object for use with the state restoration system.

Providing an apps shortcut items

var shortcutItems: [UIApplicationShortcutItem]?

The Home screen dynamic quick actions for your app; available on devices that support 3D Touch.

Accessing protected content

var isProtectedDataAvailable: Bool

A Boolean value that indicates whether content protection is active.

class let protectedDataDidBecomeAvailableNotification: NSNotification.Name

A notification that posts when the protected files become available for your code to access.

class let protectedDataWillBecomeUnavailableNotification: NSNotification.Name

A notification that posts shortly before protected files are locked down and become inaccessible.

Receiving remote control events

func beginReceivingRemoteControlEvents()

Tells the app to begin receiving remote-control events.

func endReceivingRemoteControlEvents()

Tells the app to stop receiving remote-control events.

Accessing the layout direction

var userInterfaceLayoutDirection: UIUserInterfaceLayoutDirection

The layout direction of the user interface.

enum UIUserInterfaceLayoutDirection

Constants that specify the directional flow of the user interface.

Controlling and handling events

func sendEvent(UIEvent)

Dispatches an event to the appropriate responder objects in the app.

Sends an action message identified by the selector to a specified target.

var applicationSupportsShakeToEdit: Bool

A Boolean value that determines whether shaking the device displays the undo-redo user interface.

Managing the apps icon

var supportsAlternateIcons: Bool

A Boolean value that indicates whether the app is allowed to change its icon.

var alternateIconName: String?

The name of the icon the system displays for the app.

Changes the icon the system displays for the app.

Managing the preferred content size

var preferredContentSizeCategory: UIContentSizeCategory

The font sizing option preferred by the user.

struct UIContentSizeCategory

Constants that indicate the preferred size of your content.

protocol UIContentSizeCategoryAdjusting

A collection of methods that give controls an easy way to adopt automatic adjustment to content category changes.

static let didChangeNotification: NSNotification.Name

A notification that posts when the user changes the preferred content size setting.

static let newValueUserInfoKey: String

A key that reflects the new preferred content size.

Specifying the supported interface orientations

Returns the default set of interface orientations to use for the view controllers in the specified window.

Tracking controls in the run loop

static let tracking: RunLoop.Mode

The mode set while tracking in controls takes place.

Detecting screenshots

class let userDidTakeScreenshotNotification: NSNotification.Name

A notification that posts when a person takes a screenshot on the device.

Discovering if your app is the default app in a category

Reports whether this app is the persons default app in the given category.

enum Category

Constants that describe the types of apps in the system.

struct CategoryDefaultError

Errors that can happen when the system checks if your app is the default app in a category.

Deprecated

Review unsupported symbols and their replacements.

Structures

struct BackgroundRefreshStatusDidChangeMessage Beta

struct DidBecomeActiveMessage Beta

struct DidEnterBackgroundMessage Beta

struct DidFinishLaunchingMessage Beta

struct DidReceiveMemoryWarningMessage Beta

struct ProtectedDataDidBecomeAvailableMessage Beta

struct ProtectedDataWillBecomeUnavailableMessage Beta

struct SignificantTimeChangeMessage Beta

struct UserDidTakeScreenshotMessage Beta

struct WillEnterForegroundMessage Beta

struct WillResignActiveMessage Beta

struct WillTerminateMessage Beta

Relationships

Inherits From

  • UIResponder

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIUserActivityRestoring

See Also

Life cycle

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

Initialize your apps data structures, prepare your app to run, and respond to any launch-time requests from the system.

Manage multiple instances of your apps UI simultaneously, and direct resources to the appropriate instance of your UI.


https://developer.apple.com/documentation/uikit/uidocument)


https://developer.apple.com/documentation/uikit/uiview)


https://developer.apple.com/documentation/uikit/uiapplication)


https://developer.apple.com/documentation/uikit/creating-a-mac-version-of-your-ipad-app

  • UIKit
  • Mac Catalyst
  • Creating a Mac version of your iPad app

Article

Creating a Mac version of your iPad app

Bring your iPad app to macOS with Mac Catalyst.

Overview

With Xcode 11 and later, you can create a Mac version of your iPad app using Mac Catalyst. Configuring your app for Mac can take just a click in a checkbox, although you may need more steps, depending on the features and frameworks that your app uses.

Configure your app for Mac

To add support for Mac, open your Xcode project and select the iOS target that you want to configure. In the General tab, under Deployment Info, select the Mac checkbox. (If your app supports iPhone only, the checkbox is unavailable.)

When you enable Mac support, Xcode adds the App Sandbox Entitlement to your project. Xcode only includes this entitlement in the Mac version of your app, not the iOS version. Xcode also adds My Mac to the list of destinations. Select this destination to run your Mac app from Xcode.

At this point, you may be able to build and run the Mac version of your app. To give it a try, select My Mac as the destination and run your project.

Go beyond the checkbox

You may find that the Mac version of your app still doesnt build because:

  • Your project includes incompatible frameworks, libraries, or embedded content.

  • Your source code references unsupported APIs.

When you enable Mac support, Xcode automatically excludes incompatible frameworks and embedded content where possible for Mac builds of your project. Still, you may need to manually exclude other frameworks or content.

To manually exclude an item, open Frameworks, Libraries, and Embedded Content under the General tab for your iOS target. Then select iOS as the platform setting for the item. This setting excludes the item from the Mac version of your app.

If you have source code referencing APIs unavailable to the Mac version of your app, enclose the code in a compilation conditional block that uses the targetEnvironment() (Swift) or TARGET_OS_MACCATALYST (Objective-C) platform condition.

#if !targetEnvironment(macCatalyst) // Code to exclude from Mac. #endif

#if !TARGET_OS_MACCATALYST #endif

You can use these same approaches to include a framework and code that are available only in macOS. For a framework, select macOS for the platform setting, and enclose the code with a #if targetEnvironment(macCatalyst) (Swift) or #if TARGET_OS_MACCATALYST (Objective-C) statement.

Make your app more like a Mac app

After following these steps, you should be able to run your iPad app on Mac. But before you ship your new app to customers, it needs a few more changes to make it more like a Mac app. To learn more, see Optimizing your iPad app for Mac.


https://developer.apple.com/documentation/uikit/choosing-a-user-interface-idiom-for-your-mac-app


https://developer.apple.com/documentation/uikit/optimizing-your-ipad-app-for-mac


https://developer.apple.com/documentation/uikit/uikit-catalog-creating-and-customizing-views-and-controls


https://developer.apple.com/documentation/uikit/building-and-improving-your-app-with-mac-catalyst

  • UIKit
  • Mac Catalyst
  • Building and improving your app with Mac Catalyst

Sample Code

Building and improving your app with Mac Catalyst

Improve your iPadOS app with Mac Catalyst by supporting native controls, multiple windows, sharing, printing, menus and keyboard shortcuts.

Download

Xcode 13.0+

Overview

See Also

User interface

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.

Displaying a checkbox in your Mac app built with Mac Catalyst

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

Removing the title bar in your Mac app built with Mac Catalyst

Display content that fills the entire height of a window by removing the title bar.

Provide a space for controls under a windows title bar and above your custom content.

Touch Bar

Display interactive content and controls in the Touch Bar.


https://developer.apple.com/documentation/uikit/displaying-a-checkbox-in-your-mac-app-built-with-mac-catalyst

  • UIKit
  • Mac Catalyst
  • Displaying a checkbox in your Mac app built with Mac Catalyst

Article

Displaying a checkbox in your Mac app built with Mac Catalyst

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

Overview

A Mac app built with Mac Catalyst that uses the Mac user interface idiom displays a UISwitch as a checkbox when the preferredStyle value is UISwitch.Style.automatic (the default value) or UISwitch.Style.checkbox. If your app doesnt use the UIUserInterfaceIdiom.mac idiom, the switch appears as a slider switch. To learn more, see Choosing a user interface idiom for your Mac app.

Add text to the checkbox

To display text alongside the checkbox, set the title property.

let showFavoritesAtTop = UISwitch() showFavoritesAtTop.title = "Always show favorite recipes at the top"

Resize the checkbox

A checkbox-style switch has a default frame size of zero. If youre not using Auto Layout to determine the size and position of the switch, call sizeToFit() to resize it so that it uses the appropriate amount of space needed to display the checkbox and its title.

See Also

User interface

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.

Building and improving your app with Mac Catalyst

Improve your iPadOS app with Mac Catalyst by supporting native controls, multiple windows, sharing, printing, menus and keyboard shortcuts.

Removing the title bar in your Mac app built with Mac Catalyst

Display content that fills the entire height of a window by removing the title bar.

Provide a space for controls under a windows title bar and above your custom content.

Touch Bar

Display interactive content and controls in the Touch Bar.


https://developer.apple.com/documentation/uikit/removing-the-title-bar-in-your-mac-app-built-with-mac-catalyst

  • UIKit
  • Mac Catalyst
  • Removing the title bar in your Mac app built with Mac Catalyst

Article

Removing the title bar in your Mac app built with Mac Catalyst

Display content that fills the entire height of a window by removing the title bar.

Overview

By default, Mac apps built with Mac Catalyst display a title bar across the top of their windows. A horizontal line separates the title bar from the content of the window.

Some Mac apps such as Messages and Contacts have no title bar in their main window. Instead, the top of the window shows only the Close, Minimize, and Zoom buttons with no separator between them and the windows content. In this UI design, the content area fills the entire height of the window.

The following image illustrates these styles in two windows. The first window displays a title bar, while the second has none.

Remove the title bar

If you choose to design your window without a title bar, you must remove it from the window. To remove the title bar, set the title bars titleVisibility property to UITitlebarTitleVisibility.hidden and the toolbar property to nil. The following code shows how to remove the title bar and its separator from the window during the setup of a new scene.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

guard let windowScene = (scene as? UIWindowScene) else { return }

#if targetEnvironment(macCatalyst) if let titlebar = windowScene.titlebar { titlebar.titleVisibility = .hidden titlebar.toolbar = nil } #endif

}

See Also

User interface

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.

Building and improving your app with Mac Catalyst

Improve your iPadOS app with Mac Catalyst by supporting native controls, multiple windows, sharing, printing, menus and keyboard shortcuts.

Displaying a checkbox in your Mac app built with Mac Catalyst

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

Provide a space for controls under a windows title bar and above your custom content.

Touch Bar

Display interactive content and controls in the Touch Bar.


https://developer.apple.com/documentation/uikit/toolbar

Collection

  • UIKit
  • Mac Catalyst
  • Toolbar

API Collection

Toolbar

Provide a space for controls under a windows title bar and above your custom content.

Topics

View

Integrating a Toolbar and Touch Bar into Your App

Provide users quick access to your apps features from a toolbar and corresponding Touch Bar.

@MainActor class NSToolbar

An object that manages the space above your apps custom content and either below or integrated with the windows title bar.

protocol NSToolbarItemValidation : NSObjectProtocol

Validation of a toolbar item.

Items

@MainActor class NSToolbarItem

A single item that appears in a windows toolbar.

@MainActor class NSToolbarItemGroup

A group of subitems in a toolbar item.

enum ControlRepresentation

enum SelectionMode

A value that indicates how a grouped toolbar item selects its subitems.

@MainActor class NSMenuToolbarItem

A control that presents a menu in a windows toolbar.

@MainActor class NSSearchToolbarItem

A toolbar item that contains a search field optimized for performing text-based searches.

@MainActor class NSTrackingSeparatorToolbarItem

A toolbar separator that aligns with the vertical split view in the same window.

class NSUIViewToolbarItem

An item in a windows toolbar that hosts a custom UIKit view.

Item validation

protocol NSCloudSharingValidation : NSObjectProtocol

A protocol that a Cloud-sharing toolbar item uses to get validation of an item.

See Also

User interface

UIKit Catalog: Creating and customizing views and controls

Customize your apps user interface with views and controls.

Building and improving your app with Mac Catalyst

Improve your iPadOS app with Mac Catalyst by supporting native controls, multiple windows, sharing, printing, menus and keyboard shortcuts.

Displaying a checkbox in your Mac app built with Mac Catalyst

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

Removing the title bar in your Mac app built with Mac Catalyst

Display content that fills the entire height of a window by removing the title bar.

Touch Bar

Display interactive content and controls in the Touch Bar.


https://developer.apple.com/documentation/uikit/navigating-an-app-s-user-interface-using-a-keyboard

  • UIKit
  • Focus-based navigation
  • Navigating an apps user interface using a keyboard

Sample Code

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Download

Xcode 13.0+

Overview

See Also

Focus interactions

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/adding-menus-and-shortcuts-to-the-menu-bar-and-user-interface

  • UIKit
  • Mac Catalyst
  • Adding menus and shortcuts to the menu bar and user interface

Sample Code

Adding menus and shortcuts to the menu bar and user interface

Provide quick access to useful actions by adding menus and keyboard shortcuts to your Mac app built with Mac Catalyst.

Download

Xcode 13.1+

Overview

This sample project demonstrates how to add menu commands and keyboard shortcuts to the menu bar. The sample app uses its MenuController object to insert a UIMenuSystem object that adds the following menus:

  • New: Appears at the beginning of the File menu and contains the two operations New Date Item and New Text Item, which add items to the table view.

  • Cities: Contains a group of UICommand and UIKeyCommand objects.

  • Navigation: Contains a group of UIKeyCommand objects for command-key navigation.

  • Style: Contains a group of UICommand objects that have checkmark states. This grouping looks like a font-style menu for text formatting.

  • Tools: Contains a group of UICommand objects.

The sample project also shows you how to add contextual menus to views, and how to handle menu-command selection using UIContextMenuInteractionDelegate.

Configure the sample code project

In Xcode, select your development team on the iOS targets Signing and Capabilities tab.

Add menus to the menu bar

Create UIMenu objects and use them to construct the menus and submenus. This sample adds menus to the menu bar when it runs on macOS, and key command elements in those menus also appear in the discoverability heads-up display (HUD) on iPad when the user presses the command key.

The Mac version of an iPad app comes with a standard menu bar. Use the UIMenuSystem class, an object that represents the main or contextual menu system, to modify the menu bar.

The sample uses UIMenuSystem to add menus and key commands to the main system menu by implementing buildMenu(with:) in AppDelegate. This function receives a UIMenuBuilder object that the sample then uses to add and remove menus. Because menus can exist with no window or view hierarchy, the system only consults UIApplication and UIApplicationDelegate to build the apps menu bar.

Menu commands consist of UICommand, UIKeyCommand, and UIAction objects that are grouped in a UIMenu container.

Add menu commands to the file menu

This sample inserts a UIKeyCommand called Command-O into the File Menu and creates a corresponding keyboard shortcut:

let openCommand = UIKeyCommand(title: NSLocalizedString("OpenTitle", comment: ""), image: nil, action: #selector(AppDelegate.openAction), input: "o", modifierFlags: .command) let openMenu = UIMenu(title: "", image: nil, identifier: .openMenu, options: .displayInline, children: [openCommand]) return openMenu }

Notice that the UIKeyCommand title is a localized string using the NSLocalizedString function, which can display the menu name in multiple languages.

This sample inserts the Open command into the middle of the menu bars File menu:

builder.insertChild(MenuController.openMenu(), atStartOfMenu: .file)

Mac apps also typically include a Print menu command in the File menu. This sample includes both Print and Export as PDF menu commands in the File Menu. These menu commands are automatically inserted when the Info.plist contains the UIApplicationSupportsPrintCommand key whose value is set to true. The application responds to these print commands by implementing UIResponder's printContent(_ sender: Any?) function.

Contribute to the edit menu

Editing operations, such as cut, copy, paste, and delete, are commonly used in most apps. This sample app provides these operations through the Edit menu, where the user can edit the samples left-side content or its primary table-view content. These operations represent the first-responder functions cut(_ sender: Any?), copy(_ sender: Any?), paste(_ sender: Any?), delete(_ sender: Any?).

This sample implements canPerformAction:withSender: to determine if these edit operations are supported.

if action == #selector(printContent) { // Allow for printing if a table view cell is selected. return tableView.indexPathForSelectedRow != nil } else if action == #selector(newAction(_:)) { // User wants to perform a New operation. return true } else { switch (tableView.indexPathForSelectedRow, action) {

// These Edit commands are supported. case let (?, action) where action == #selector(cut(:)) || action == #selector(copy(:)) || action == #selector(delete(:)): return true case (_?, _): // Allow the nextResponder to make the determination. return super.canPerformAction(action, withSender: sender)

// Paste is supported if the pasteboard has text. case (.none, action) where action == #selector(paste(_:)): return (UIPasteboard.general.string != nil) ? true : // Allow the nextResponder to make the determination. super.canPerformAction(action, withSender: sender) case (.none, _): return false } } }

Add commands to control the user interface

In the sample, you can change the primary or left-side table views selection by using UIKeyCommand. These key commands are connected to the up and down arrow keys and are added directly to the table view. The following example shows how to add the down arrow key as a UIKeyCommand:

let downArrowCommand = UIKeyCommand(input: UIKeyCommand.inputDownArrow, modifierFlags: [], action: #selector(PrimaryViewController.downArrowAction(_:))) addKeyCommand(downArrowCommand)

The sample also demonstrates how to add menu commands as command-key equivalents. The following example shows how to create a menu with all four arrow keys as command keys:

let keyCommands = [ UIKeyCommand.inputRightArrow,
UIKeyCommand.inputLeftArrow,
UIKeyCommand.inputUpArrow,
UIKeyCommand.inputDownArrow ] let arrows = Arrows.allCases

let arrowKeyChildrenCommands = zip(keyCommands, arrows).map { (command, arrow) in UIKeyCommand(title: arrow.localizedString(), image: nil, action: #selector(AppDelegate.navigationMenuAction(_:)), input: command, modifierFlags: .command, propertyList: [CommandPListKeys.ArrowsKeyIdentifier: arrow.rawValue]) }

let arrowKeysGroup = UIMenu(title: "", image: nil, identifier: .arrowsMenu, options: .displayInline, children: arrowKeyChildrenCommands)

return UIMenu(title: NSLocalizedString("NavigationTitle", comment: ""), image: nil, identifier: .navMenu, options: [], children: [arrowKeysGroup]) }

Display contextual menus

The sample displays a contextual menu through the use of UIContextMenuInteractionDelegate, an interaction object used to display relevant actions for the content.

For macOS, the user control-clicks or right-clicks the DetailViewController. For iPadOS, the user taps and holds the DetailViewController. The sample uses UIContextMenuInteractionDelegate to display Cut, Copy, Paste, Delete, Rename, and Share commands. This kind of contextual menu is a grouping of UIAction objects. UIAction is a menu element that performs its action in a closure. In iOS, optionally customize this contextual menus highlight preview by using contextMenuInteraction(_:previewForHighlightingMenuWithConfiguration:). This delegate function returns a primary view controller. Override this function to enable menu commands based on the table view state or the state of the pasteboard.

Adjust the style menu

The sample implements validate(_:), where it can adjust the Style menu as the user selects between one or more font styles: plain, bold, italic, underline.

// The font style menu item check marks used in the Style menu.

// Update the state of a given command by adjusting the Style menu. // Note: Only command groups that are added will be called to validate. override func validate(_ command: UICommand) { // Obtain the plist of the incoming command.

if let fontStyleDict = command.propertyList as? [String: String] { // Check if the command comes from the Style menu. if let fontStyle = fontStyleDict[MenuController.CommandPListKeys.StylesIdentifierKey] { // Update the Style menu command state (checked or unchecked). command.state = fontMenuStyleStates.contains(fontStyle) ? .on : .off } } else { // Validate the disabled command. This keeps the menu item disabled. if let commandPlistString = command.propertyList as? String { if commandPlistString == MenuController.disabledCommand { command.attributes = .disabled } } } }

Add a preferences menu

Mac apps typically display app-specific preferences using a preferences window. The sample adds a preferences window by adding a Settings bundle to the Xcode projects target. The window automatically becomes available to the user through the Preferences menu command in the Application menu. To learn more about preferences, see Displaying a Preferences window.

See Also

User interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.

class UIHoverGestureRecognizer

A continuous gesture recognizer that interprets pointer movement over a view.


https://developer.apple.com/documentation/uikit/handling-key-presses-made-on-a-physical-keyboard

  • UIKit
  • Keyboards and input
  • Handling key presses made on a physical keyboard

Article

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.

Overview

In iOS apps and Mac apps built with Mac Catalyst, the system reports key presses that a person makes on a physical keyboard by sending press events to responder objects in the responder chain of the active app.

A responder chain is a linked series of UIResponder objects, such as UIViewController and UIApplication, that either handle an event or transfer responsibility for handling the event to other responders in the app. To learn more about responders and the responder chain, see Using responders and the responder chain to handle events.

Detect a key press

To detect a key press that a person makes on a physical keyboard, override pressesBegan(_:with:) in a responder object of your app such as the app delegate or main view controller.

To determine what key they pressed, iterate through the set of presses, inspecting the key property of each press. Use charactersIgnoringModifiers to determine the text value of key, and whether the responder should handle the key press or not. If the responder doesnt handle the key press, call pressesBegan(_:with:) on the superclass to send the press event to the next responder in the active responder chain.

For example, the following code listing handles someone pressing either the left or right arrow.

// Handle someone pressing a key on a physical keyboard.

with event: UIPressesEvent?) {

var didHandleEvent = false

for press in presses {

// Get the pressed key. guard let key = press.key else { continue }

if key.charactersIgnoringModifiers == UIKeyCommand.inputLeftArrow { // Someone pressed the left arrow key. // Respond to the key-press event. didHandleEvent = true } if key.charactersIgnoringModifiers == UIKeyCommand.inputRightArrow { // Someone pressed the right arrow key. // Respond to the key-press event. didHandleEvent = true } }

if didHandleEvent == false { // If someone presses a key that you're not handling, // pass the event to the next responder. super.pressesBegan(presses, with: event) } }

Detect a key release

Override the responders pressesEnded(_:with:) method to detect when someone releases a key. To get information about the key, do the same as you did when detecting a key press; inspect the key property of each press in the presses set. For example, the following code listing handles someone releasing either the left or right arrow.

// Handle someone releasing a key on a physical keyboard.

// Get the released key. guard let key = press.key else { continue }

if key.charactersIgnoringModifiers == UIKeyCommand.inputLeftArrow { // Someone released the left arrow key. // Respond to the event. didHandleEvent = true } if key.charactersIgnoringModifiers == UIKeyCommand.inputRightArrow { // Someone released the right arrow key. // Respond to the event. didHandleEvent = true } }

if didHandleEvent == false { // If someone releases a key that you're not handling, // pass the event to the next responder. super.pressesEnded(presses, with: event) } }

See Also

Physical keyboards

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Adding hardware keyboard support to your app

Enhance interactions with your app by handling raw keyboard events, writing custom keyboard shortcuts, and working with gesture recognizers.

class UIKey

An object that provides information about the state of a keyboard key.

enum UIKeyboardHIDUsage

A set of HID usage codes that identify the keys of a USB keyboard.


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer

  • UIKit
  • UIHoverGestureRecognizer

Class

UIHoverGestureRecognizer

A continuous gesture recognizer that interprets pointer movement over a view.

@MainActor class UIHoverGestureRecognizer

Mentioned in

Optimizing your iPad app for Mac

Overview

On macOS and iPadOS devices, a person can move the pointer over user interface elements. For some UI designs, its important to know when the pointer moves over an element, with no other user interactions, such as clicking the mouse button. The text for a hyperlink, for instance, may change colors or appear with an underline as the pointer moves over the link. This creates a rollover effect.

To provide this experience in your app, add a hover gesture recognizer that reacts as the pointer moves over the view. Provide the gesture recognizer with a target and action that the system calls when the pointer enters, exits, and moves across the view. UIHoverGestureRecognizer has no effect when your app runs in iOS. The following code changes the buttons default color to red as the pointer moves over the button.

class ViewController: UIViewController {

@IBOutlet var button: UIButton!

override func viewDidLoad() { super.viewDidLoad()

let hover = UIHoverGestureRecognizer(target: self, action: #selector(hovering(_:))) button.addGestureRecognizer(hover) }

@objc func hovering(_ recognizer: UIHoverGestureRecognizer) { switch recognizer.state { case .began, .changed: button.titleLabel?.textColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) case .ended: button.titleLabel?.textColor = UIColor.link default: break } } }

Topics

Supporting Apple Pencil hover

var altitudeAngle: CGFloat

A value that represents the altitude angle of the hovering pointing device.

A value that represents the azimuth angle of the hovering pointing device in the specified view.

A value that represents the azimuth unit vector of the hovering pointing device in the specified view.

var rollAngle: CGFloat

A value that represents the current barrel-roll angle of Apple Pencil.

var zOffset: CGFloat

A value that represents the normalized distance between the screen and a hovering pointing device, such as Apple Pencil.

Relationships

Inherits From

  • UIGestureRecognizer

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable
  • SendableMetatype

See Also

User interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Adding menus and shortcuts to the menu bar and user interface

Provide quick access to useful actions by adding menus and keyboard shortcuts to your Mac app built with Mac Catalyst.

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.


https://developer.apple.com/documentation/uikit/displaying-a-preferences-window

  • UIKit
  • Mac Catalyst
  • Displaying a Preferences window

Article

Displaying a Preferences window

Provide a Preferences window in your Mac app built with Mac Catalyst so users can manage app preferences defined in a Settings bundle.

Overview

Mac apps typically display app-specific preferences using a Preferences window accessible through the standard Preferences menu item under the app menu in the menu bar.

Mac apps built with Mac Catalyst that include a Settings.bundle file automatically get the Preferences menu item and a Preferences window. When a user selects the Preferences menu item, the system displays a Mac-friendly Preferences window based on the options provided in your Settings bundle. To learn about Settings bundles, see Implementing an iOS Settings Bundle.

Add a Preferences window to your app

To include a Preferences window in your Mac app, add a Settings.bundle file to your Xcode project by pressing Command-N and selecting the Settings Bundle template from the Resources section under iOS. Then click Next to save the file to your project.

Add toolbar tabs to the Preferences window

A Settings bundle can include one or more child panes that allow you to organize your preferences hierarchically (see Hierarchical Preferences). In iOS, the Settings app displays a child pane as a preference row. When the user taps the row, the app displays a new view showing the preferences defined in the child panes property list file.

In macOS, the Preferences window displays a child pane as a tab on the windows toolbar. When the user clicks the tab, they see the preferences provided in the child panes property list file.

The tab for a child pane displays the panes title and a system-provided icon. To customize the icon, add the following key to the child panes property list file:

Icon

Optional. A string with the name of the image file to display as the toolbar tab icon in the Preferences window.

You must include the image file in the Settings bundle that contains the child panes property list file.

Confirm changes made with a toggle switch

Another element of the Settings bundle is the Toggle Switch Element, which displays an ON/OFF switch that the user can toggle. Your Mac app can prompt the user for a confirmation when they toggle the switch by including the following keys in the toggle switch element:

TrueConfirmationPrompt

Optional. A dictionary that defines the prompt to present to users when they attempt to turn on the switch.

FalseConfirmationPrompt

Optional. A dictionary that defines the prompt to present to users when they attempt to turn off the switch.

Each dictionary contains the following keys that define the contents of the prompt:

Type

Required. Must be set to PSConfirmationPrompt.

Title

Required. A string with the title of the prompt. The title might not appear on some devices.

Prompt

Required. A string with the body text that the prompt displays.

ConfirmText

Optional. A string with the text displayed in the prompts confirmation button. The toggle switch value changes when the user clicks this button.

DenyText

Optional. A string with the text displayed in the prompts cancel button. The toggle switch value doesnt change when the user clicks this button.

Display subtitles for toggle switches

Some iOS apps show descriptive text in a subtitle below a toggle switch using a group item with footer text. While the Preferences window supports this approach, the appearance on a Mac isnt ideal. Instead, include the following key in the toggle switch element to show a subtitle:

Description

Optional. A longer descriptive string to display under a toggle switch.

See Also

User preferences

Detecting changes in the preferences window

Listen for and respond to a users preference changes in your Mac app built with Mac Catalyst using Combine.


https://developer.apple.com/documentation/uikit/detecting-changes-in-the-preferences-window

  • UIKit
  • Mac Catalyst
  • Detecting changes in the preferences window

Sample Code

Detecting changes in the preferences window

Listen for and respond to a users preference changes in your Mac app built with Mac Catalyst using Combine.

Download

Xcode 11.1+

Overview

With Combine, your app can listen for changes a user makes to the apps Preferences window, and respond to those changes. The sample app provides a Preferences window with one setting: background color. When the user selects a color, the background of the main view changes to match their selection.

This sample code project shows how to:

  • Add a Preferences window in a Mac app built with Mac Catalyst.

  • Register default values for the preferences.

  • Retrieve current preference values.

  • Listen for and respond to changes the user makes in the Preferences window.

To use the sample app, open the sample code project in Xcode and select My Mac as the destination. Then, build and run the sample project.

Provide a preferences window in the app

The sample app includes a Settings.bundle file that the system uses to automatically add the standard Preferences menu item to the app menu. Selecting the menu item displays a Preferences window that the system generates based on the preference specifiers defined in the Settings bundle. To learn more, see Displaying a Preferences window.

The Settings bundle for the sample app has a preference specifier for setting the background color of the main view. It also has a child pane preference specifier, which displays a second tab of preferences in the Preferences windows. The Settings bundle file Root.plist defines these specifiers, while the file OtherSettings.plist defines the preference specifiers for the child pane.

Register default preference values

When the user changes preferences in the Preferences window, the window saves them to the application domain of the user defaults system. To store and retrieve the preference values within the app, the sample app uses UserDefaults. However, when you launch the sample app for the first time, the preference values dont exist in the user defaults system. If the app tries retrieving a value, UserDefaults returns nil.

To ensure that the app always retrieves a non- nil value, the sample app registers the default preference values with the registration domain. However, this domain doesnt persist these values between app launches, so the sample app registers the default values each time the user launches the app.

// To ensure that the app has a good set of preference values, register // the default values each time the app launches. registerDefaultPreferenceValues()

return true }

The method registerDefaultPreferenceValues() retrieves the default values from the Settings bundle by retrieving the preference specifiers from the Root.plist file and parsing the specifiers for their default value. After retrieving the values, the method registers the default values.

func registerDefaultPreferenceValues() { let preferenceSpecifiers = retrieveSettingsBundlePreferenceSpecifiers(from: "Root.plist") let defaultValuesToRegister = parse(preferenceSpecifiers)

// Register the default values with the registration domain. UserDefaults.standard.register(defaults: defaultValuesToRegister) }

To parse the preference specifiers, the parse() method loops through the array of specifiers, copying the default values into the dictionary defaultValuesToRegister. If the method detects the PSChildPaneSpecifier type, it gets the name of the child pane property list file, and merges the default values in the file into the defaultValuesToRegister dictionary. After gathering the default values, the method returns the dictionary to the caller.

var defaultValuesToRegister = String: Any

// Parse the preference specifiers, copying the default values // into the defaultValuesToRegister dictionary. for preferenceItem in preferenceSpecifiers { if let key = preferenceItem["Key"] as? String, let defaultValue = preferenceItem["DefaultValue"] { defaultValuesToRegister[key] = defaultValue }

// Add child pane preference specifiers. if let type = preferenceItem["Type"] as? String, type == "PSChildPaneSpecifier" { if var file = preferenceItem["File"] as? String { if file.hasSuffix(".plist") == false { file += ".plist" } let morePreferenceSpecifiers = retrieveSettingsBundlePreferenceSpecifiers(from: file) let moreDefaultValuesToRegister = parse(morePreferenceSpecifiers) defaultValuesToRegister.merge(moreDefaultValuesToRegister) { (current, _) in current } } } }

return defaultValuesToRegister }

Retrieve preference values

After registering the default values with the registration domain, the app can retrieve a preference value without the possibility of encountering an unavailable value. To simplify access to the background color preference value, the sample app extends UserDefaults to include properties for each preference value.

extension UserDefaults {

@objc dynamic var backgroundColorValue: Int { return integer(forKey: "backgroundColorValue") }

@objc dynamic var someRandomOption: Bool { return bool(forKey: "someRandomOption") }

}

Handle changes made in the preferences window

As the user changes the background color setting in the Preferences window, the app changes the background color of its main view. To accomplish this, the view controller for the main view creates a subscriber in the viewDidLoad() method. When the background color value changes, the subscriber receives the new value, maps it to a UIColor object, and assigns the color to the views backgroundColor property.

var subscriber: AnyCancellable? // Subscriber of preference changes.

override func viewDidLoad() { super.viewDidLoad()

// Set the view's initial background color to the color specified in Preferences. if let colorSetting = BackgroundColors(rawValue: UserDefaults.standard.backgroundColorValue) { view.backgroundColor = colorSetting.currentColor() }

// Listen for changes to the background color preference made in the Preferences window. subscriber = UserDefaults.standard .publisher(for: .backgroundColorValue, options: [.initial, .new]) .map( { BackgroundColors(rawValue: $0)?.currentColor() }) .assign(to: \UIView.backgroundColor, on: self.view) }

See Also

User preferences

Displaying a Preferences window

Provide a Preferences window in your Mac app built with Mac Catalyst so users can manage app preferences defined in a Settings bundle.


https://developer.apple.com/documentation/uikit/showing-help-tags-for-views-and-controls-using-tooltip-interactions

  • UIKit
  • Mac Catalyst
  • Showing help tags for views and controls using tooltip interactions

Sample Code

Showing help tags for views and controls using tooltip interactions

Explain the purpose of interface elements by showing a tooltip when a person positions the pointer over the element.

Download

Xcode 13.0+

Overview

This sample shows how to display a tooltip (also known as a help tag) that explains the purpose of, or provide additional information about, an interface element such as a view or control without shifting a persons focus away from the primary interface. A tooltip appears when a person positions the pointer over a view or control for a few seconds. The tooltip remains visible for a few seconds or until the pointer moves away from the interface element.

For guidelines on designing the content of your tooltips, see the Help section of the macOS Human Interface Guidelines.

Configure the sample code project

Tooltips are available in the sample app when running in macOS 12 or later. To build and run the sample app:

Add a tooltip to a view

To show a tooltip when the pointer hovers over a view, the sample creates a UIToolTipInteraction object and passes in the default tooltip text. Then the sample adds the interaction to a UIView using the views addInteraction(_:) method.

lazy var viewWithDefaultTooltip: UIView = { let view = UIView() view.backgroundColor = UIColor.systemGreen view.addText("Hover the pointer over this view to see its default tooltip.")

let tooltipInteraction = UIToolTipInteraction(defaultToolTip: "The default tooltip for the view.") view.addInteraction(tooltipInteraction)

return view }()

The sample uses the same approach for other types of views too, for instance, to add a tooltip to an instance of UILabel:

lazy var labelWithTooltip: UILabel = { let label = UILabel() label.text = "Hover the pointer over this label to see its tooltip." label.numberOfLines = 0

let tooltipInteraction = UIToolTipInteraction(defaultToolTip: "The label's tooltip.") label.addInteraction(tooltipInteraction)

return label }()

Add a tooltip to a control

For interface elements that derive from UIControl, such as UIButton, the sample uses the toolTip property to set the default text that appears in the tooltip instead of adding an interaction to the control.

lazy var buttonWithTooltip: UIButton = { var configuration = UIButton.Configuration.filled() configuration.title = "Buy" configuration.subtitle = "Only $9.99" configuration.titleAlignment = .center

let action = UIAction { _ in print("Thank you for your purchase.") }

let button = UIButton(configuration: configuration, primaryAction: action) button.toolTip = "Click to buy this item. You'll have a chance to change your mind before confirming your purchase." button.preferredBehavioralStyle = .pad

return button }()

Change the tooltip text of a view

Setting the defaultToolTip property of a tooltip interaction and setting the toolTip property of a control are convenient ways to show tooltip text that dont change while the app runs. However, there may be times when an app needs to determine the contents of the tooltip based on the state of the app or logic specific to the app. For instance, the sample app looks up the name of a views background color and displays the name in a tooltip when the pointer hovers over that view.

To show the background color name in a tooltip, the sample creates an instance of UIToolTipInteraction and sets its delegate property to an instance of ViewWithBackgroundColorTooltip, which is a custom view that conforms to the UIToolTipInteractionDelegate protocol. Then the sample adds the interaction to the view.

lazy var viewWithBackgroundColorTooltip: UIView = { let view = ViewWithBackgroundColorTooltip() view.backgroundColor = UIColor.systemYellow view.addText("Hover the pointer over this view to see the name of the view's background color.")

let tooltipInteraction = UIToolTipInteraction() tooltipInteraction.delegate = view view.addInteraction(tooltipInteraction)

Next, ViewWithBackgroundColorTooltip implements the toolTipInteraction(_:configurationAt:) method, and returns a UIToolTipConfiguration object that contains the name of the background color as the text of the tooltip. If the color name isnt available, the method returns nil, which prevents the tooltip from displaying.

class ViewWithBackgroundColorTooltip: UIView, UIToolTipInteractionDelegate {

let configuration: UIToolTipConfiguration? if let accessibilityName = backgroundColor?.accessibilityName { configuration = UIToolTipConfiguration(toolTip: "The color is (accessibilityName).") } else { configuration = nil }

return configuration }

}

Change the tooltip text of a control

To change the tooltip text of a control like the samples shopping cart button, the sample provides a tooltip interaction delegate as it did with the custom view. But instead of creating a tooltip interaction, it sets the buttons toolTip property to the default text. This causes the control to create a UIToolTipInteraction object and assign it to the toolTipInteraction property. The sample then uses the property to assign a delegate to the interaction.

lazy var shoppingCartButtonWithTooltip: UIButton = { var configuration = UIButton.Configuration.filled() configuration.title = "Add to Cart" configuration.image = UIImage(systemName: "cart.circle") configuration.imagePlacement = NSDirectionalRectEdge.leading configuration.imagePadding = 4

let action = UIAction { [unowned self] _ in self.cartItemCount += 1 }

let button = UIButton(configuration: configuration, primaryAction: action) button.toolTip = "Click to add the item to your cart. Your cart is empty." button.toolTipInteraction?.delegate = self

The sample also implements the toolTipInteraction(_:configurationAt:) delegate method, which returns a UIToolTipConfiguration object that contains the tooltip text describing the purpose of the button and the number of items in the shopping cart.

let text: String switch cartItemCount { case 0: text = "Click to add the item to your cart. Your cart is empty." case 1: text = "Click to add the item to your cart. Your cart contains (cartItemCount) item." default: text = "Click to add the item to your cart. Your cart contains (cartItemCount) items." }

return UIToolTipConfiguration(toolTip: text) }

Specify the hover region

In addition to setting the tooltip text in a UIToolTipConfiguration object, a delegate can specify the region of an interface element where the pointer must hover to trigger the display of the tooltip. The sample app, for example, shows a view that displays a tooltip after positioning the pointer over the top or bottom regions of the view, but not when the pointer is over the middle area.

To determine whether the pointer location is in the top or bottom region of the view, the sample uses the point value that the method toolTipInteraction(_:configurationAt:) provides. When the pointer is in one of those regions, the delegate method returns a tooltip configuration that contains the tooltip text and the source rectangle, which defines the area of the view that the pointer must hover over to trigger the display of the tooltip.

class ViewWithTooltipRegion: UIView, UIToolTipInteractionDelegate {

var topRect = self.bounds var bottomRect = self.bounds

let partHeight = self.bounds.size.height / 3 topRect.size.height = partHeight bottomRect.size.height = partHeight bottomRect.origin.y = partHeight * 2

// Display the tooltip if the pointer within the top or bottom rects. if topRect.contains(point) { return UIToolTipConfiguration(toolTip: "Top area of the view.", in: topRect) } else if bottomRect.contains(point) { return UIToolTipConfiguration(toolTip: "Bottom area of the view.", in: bottomRect) }

// Pointer is in the middle of the view; don't display a tooltip. return nil }

In another example, the sample uses the source rectangle of a tooltip configuration to specify the region of selected text in a text view. When hovering the pointer over the selected text, a tooltip appears but it doesnt appear when the pointer hovers over unselected text.

class TextViewWithTooltip: UITextView, UIToolTipInteractionDelegate {

guard let selectedTextRange = self.selectedTextRange, selectedTextRange.isEmpty == false else { return nil }

var unionedRect = firstRect(for: selectedTextRange) for selectionRect in selectionRects(for: selectedTextRange) { unionedRect = unionedRect.union(selectionRect.rect) }

if let selectedText = text(in: selectedTextRange) { return UIToolTipConfiguration(toolTip: "Selected text: (selectedText)", in: unionedRect) }

return nil }

See Also

Tooltips

class UIToolTipInteraction

An interaction object that makes it possible to show a tooltip when hovering a pointer over a view or control.

protocol UIToolTipInteractionDelegate

An interface that provides tooltip settings to an interaction.


https://developer.apple.com/documentation/uikit/uitooltipinteraction

  • UIKit
  • UIToolTipInteraction

Class

UIToolTipInteraction

An interaction object that makes it possible to show a tooltip when hovering a pointer over a view or control.

@MainActor class UIToolTipInteraction

Overview

To show a tooltip when the pointer hovers over a view, add a UIToolTipInteraction object to the view. For example, the following code listings shows how to add a tooltip to a label:

let label = UILabel() label.text = "Label with a tooltip"

let tooltipInteraction = UIToolTipInteraction(defaultToolTip: "The label's tooltip.") label.addInteraction(tooltipInteraction)

If you want your app to determine the tooltip text at a later time — for instance, to reflect the current state of your app — set the interactions delegate property to an object that conforms to the UIToolTipInteractionDelegate protocol.

To add a tooltip to a control derived from UIControl, use the convenience property toolTip; for example, to add a tooltip to the button:

let button = UIButton(configuration: configuration, primaryAction: action) button.toolTip = "Click to buy this item. You'll have a chance to change your mind before confirming your purchase."

Setting the toolTip property creates a tooltip interaction for the control, which you can retrieve from the toolTipInteraction property.

Topics

Creating a tooltip interaction

init()

Creates a tooltip interaction object.

init(defaultToolTip: String)

Creates a tooltip interaction object and sets the default tooltip text.

Managing the interaction

var isEnabled: Bool

A Boolean value that indicates whether the tooltip interaction is in the enabled state.

var defaultToolTip: String?

The text that appears in a tooltip by default.

Providing tooltip configurations

var delegate: (any UIToolTipInteractionDelegate)?

An object that provides text that a tooltip displays instead of the default text.

protocol UIToolTipInteractionDelegate

An interface that provides tooltip settings to an interaction.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable
  • UIInteraction

See Also

Tooltips

Showing help tags for views and controls using tooltip interactions

Explain the purpose of interface elements by showing a tooltip when a person positions the pointer over the element.


https://developer.apple.com/documentation/uikit/uitooltipinteractiondelegate

  • UIKit
  • UIToolTipInteractionDelegate

Protocol

UIToolTipInteractionDelegate

An interface that provides tooltip settings to an interaction.

@MainActor protocol UIToolTipInteractionDelegate : NSObjectProtocol

Overview

A tooltip interaction delegate provides configuration information about a tooltip. You can, for instance, use the delegate to change the text of a tooltip.

To change the tooltip text, set a tooltip interactions delegate property to an object that conforms to the UIToolTipInteractionDelegate protocol and implements the toolTipInteraction(_:configurationAt:) method. For example, in the following code listing, the code creates a new view and assigns its background color. Then the code creates a UIToolTipInteraction object, sets the delegate equal to the view, and adds the interaction to the view.

lazy var viewWithBackgroundColorTooltip: UIView = { let view = ViewWithBackgroundColorTooltip() view.backgroundColor = UIColor.systemYellow

let tooltipInteraction = UIToolTipInteraction() tooltipInteraction.delegate = view view.addInteraction(tooltipInteraction)

return view }()

The delegates implementation of the toolTipInteraction(_:configurationAt:) method looks up the accessibilityName of the views background color. If the name is available, the method creates a UIToolTipConfiguration object, passing in the name of the color. Then the method returns the configuration. If the name isnt available, the method returns nil, which prevents the display of the tooltip.

class ViewWithBackgroundColorTooltip: UIView, UIToolTipInteractionDelegate {

let configuration: UIToolTipConfiguration? if let accessibilityName = backgroundColor?.accessibilityName { configuration = UIToolTipConfiguration(toolTip: "The color is (accessibilityName).") } else { configuration = nil }

return configuration }

}

In addition to changing the tooltip text, you can also specify the region within a view or control where a person must position the pointer to trigger the display of the tooltip. To specify the region, create the tooltip configuration using the init(toolTip:in:) method.

Topics

Providing a tooltip configuration

Asks the delegate for a tooltip configuration that describes the tooltip settings.

class UIToolTipConfiguration

An object that a tooltip interaction delegate uses to describe the tooltip settings.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Tooltips

Showing help tags for views and controls using tooltip interactions

Explain the purpose of interface elements by showing a tooltip when a person positions the pointer over the element.

class UIToolTipInteraction

An interaction object that makes it possible to show a tooltip when hovering a pointer over a view or control.


https://developer.apple.com/documentation/uikit/creating-a-mac-version-of-your-ipad-app)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/choosing-a-user-interface-idiom-for-your-mac-app)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/optimizing-your-ipad-app-for-mac)


https://developer.apple.com/documentation/uikit/uikit-catalog-creating-and-customizing-views-and-controls)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/building-and-improving-your-app-with-mac-catalyst)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/displaying-a-checkbox-in-your-mac-app-built-with-mac-catalyst)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/removing-the-title-bar-in-your-mac-app-built-with-mac-catalyst)


https://developer.apple.com/documentation/uikit/toolbar)


https://developer.apple.com/documentation/uikit/navigating-an-app-s-user-interface-using-a-keyboard)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/adding-menus-and-shortcuts-to-the-menu-bar-and-user-interface)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/handling-key-presses-made-on-a-physical-keyboard)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer)


https://developer.apple.com/documentation/uikit/displaying-a-preferences-window)


https://developer.apple.com/documentation/uikit/detecting-changes-in-the-preferences-window)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/showing-help-tags-for-views-and-controls-using-tooltip-interactions)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uitooltipinteraction)


https://developer.apple.com/documentation/uikit/uitooltipinteractiondelegate)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller

  • UIKit
  • UIDocumentPickerExtensionViewController Deprecated

Class

UIDocumentPickerExtensionViewController

The principal class for the Document Picker View Controller extension.

iOS 8.014.0DeprecatediPadOS 8.014.0DeprecatedMac Catalyst 13.114.0DeprecatedvisionOS 1.01.0Deprecated

@MainActor class UIDocumentPickerExtensionViewController

Overview

The Document Picker View Controller extension can perform import and export operations on its own. If you want to support open and move operations, you must pair it with a File Provider extension.

When creating a Document Picker extension, you must subclass UIDocumentPickerExtensionViewController to provide the document pickers user interface. Your subclass presents a list of available documents and destinations to the user. When the user makes a selection, you trigger the file transfer and pass the selected URL .

Topics

Managing the user interface

func dismissGrantingAccess(to: URL?)

Dismisses the document picker.

var documentPickerMode: UIDocumentPickerMode

The document pickers file-transfer operation. (read-only)

var documentStorageURL: URL?

The root URL for documents provided by the corresponding File Provider extension. (read-only)

var originalURL: URL?

The URL of the file to be exported. (read-only)

func prepareForPresentation(in: UIDocumentPickerMode)

Performs any custom configuration of the document picker view controller.

var providerIdentifier: String

An identifier shared by this Document Picker extension and its corresponding File Provider extension. (read-only)

var validTypes: [String]?

An array of valid uniform type identifiers.

Relationships

Inherits From

  • UIViewController

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSExtensionRequestHandling
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIAppearanceContainer
  • UIContentContainer
  • UIFocusEnvironment
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIStateRestoring
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Document provider

class NSFileProviderExtension

The principal class for the nonreplicated File Provider extension.


https://developer.apple.com/documentation/uikit/uitextdocumentproxy

  • UIKit
  • UITextDocumentProxy

Protocol

UITextDocumentProxy

An object that provides textual context to a custom keyboard.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UITextDocumentProxy : UIKeyInput

Mentioned in

Handling text interactions in custom keyboards

Overview

Through conformance to the UIKeyInput protocol, a text document proxy enables a custom keyboard (which is based on the UIInputViewController class) to insert and delete text, to adjust the position of the insertion point, and to determine whether a text input object is empty. The text document proxy uses the keyboards textDocumentProxy property to do this.

For more about using a text document proxy, see UIInputViewController and Creating a custom keyboard.

Topics

Getting the text-input mode

var documentInputMode: UITextInputMode?

The text-input mode for the keyboard.

Required

Obtaining textual context around the insertion point

var documentContextAfterInput: String?

Textual context after the insertion point in the current text input object.

var documentContextBeforeInput: String?

Textual context before the insertion point in the current text input object.

Adjusting the insertion point position

func adjustTextPosition(byCharacterOffset: Int)

Moves the insertion point forward or backward in the current text input object.

Getting the selected text

var selectedText: String?

The currently selected text in the document.

Managing marked text

func setMarkedText(String, selectedRange: NSRange)

Inserts the provided text and marks it to indicate that its part of an active input session.

func unmarkText()

Unmarks the currently marked text.

Distinguishing changes in the document

var documentIdentifier: UUID

The unique identifier for the document.

Relationships

Inherits From

  • NSObjectProtocol
  • UIKeyInput
  • UITextInputTraits

See Also

Custom keyboard

protocol UIInputViewAudioFeedback

A property that enables a custom input or keyboard accessory view to play standard keyboard input clicks.

class UIInputViewController

The primary view controller for a custom keyboard app extension.

class UILexicon

A read-only array of term pairs, each in a lexicon entry object, for a custom keyboard.

class UILexiconEntry

A read-only term pair, available within a lexicon object, for a custom keyboard.


https://developer.apple.com/documentation/uikit/uiinputviewaudiofeedback

  • UIKit
  • UIInputViewAudioFeedback

Protocol

UIInputViewAudioFeedback

A property that enables a custom input or keyboard accessory view to play standard keyboard input clicks.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIInputViewAudioFeedback : NSObjectProtocol

Overview

Implement this protocol in your custom subclass of UIView that you associate with your custom input nib file. For more information, see Text Programming Guide for iOS.

Implementation of this protocol is optional but expected.

Topics

Enabling input clicks

var enableInputClicksWhenVisible: Bool

Specifies whether or not an input view enables input clicks.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Custom keyboard

protocol UITextDocumentProxy

An object that provides textual context to a custom keyboard.

class UIInputViewController

The primary view controller for a custom keyboard app extension.

class UILexicon

A read-only array of term pairs, each in a lexicon entry object, for a custom keyboard.

class UILexiconEntry

A read-only term pair, available within a lexicon object, for a custom keyboard.


https://developer.apple.com/documentation/uikit/uiinputviewcontroller


https://developer.apple.com/documentation/uikit/uilexicon

  • UIKit
  • UILexicon

Class

UILexicon

A read-only array of term pairs, each in a lexicon entry object, for a custom keyboard.

@MainActor class UILexicon

Mentioned in

Configuring a custom keyboard interface

Overview

To obtain the lexicon, call the requestSupplementaryLexicon(completion:) method of the UIInputViewController class. This method can be called only from a custom keyboard app extension. A lexicon contains words from various sources, including:

  • Unpaired first names and last names from the users Address Book database

  • A common words dictionary

Apple intends for you to consider the words in a lexicon object as supplementary to an autocorrection/suggestion lexicon of your own design. For information on custom keyboards, see Custom Keyboard in App Extension Programming Guide.

Topics

Accessing the lexicon

var entries: [UILexiconEntry]

A read-only array of term pairs for use by a custom keyboard.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable

See Also

Custom keyboard

protocol UITextDocumentProxy

An object that provides textual context to a custom keyboard.

protocol UIInputViewAudioFeedback

A property that enables a custom input or keyboard accessory view to play standard keyboard input clicks.

class UIInputViewController

The primary view controller for a custom keyboard app extension.

class UILexiconEntry

A read-only term pair, available within a lexicon object, for a custom keyboard.


https://developer.apple.com/documentation/uikit/uilexiconentry

  • UIKit
  • UILexiconEntry

Class

UILexiconEntry

A read-only term pair, available within a lexicon object, for a custom keyboard.

@MainActor class UILexiconEntry

Overview

You can employ a lexicon entry by matching user input against the entrys userInput value, and then inserting into the current text input object the corresponding documentText value. For example, if the user typed the string “iphone”, the lexicon entry with that exact, case-sensitive string in the userInput property has the string “iPhone” in the corresponding documentText property.

In some cases, the documentText string is in a different text script than the userInput string.

For information on custom keyboards, which are based on the UIInputViewController class, see Creating a custom keyboard.

Topics

Accessing a lexicon entry

var documentText: String

Text to be inserted into a text input object by a custom keyboard, corresponding to the user input value in the same lexicon entry.

var userInput: String

Text to match, during user input, to provide appropriate output to a text document from the document text value in the same lexicon entry.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable

See Also

Custom keyboard

protocol UITextDocumentProxy

An object that provides textual context to a custom keyboard.

protocol UIInputViewAudioFeedback

A property that enables a custom input or keyboard accessory view to play standard keyboard input clicks.

class UIInputViewController

The primary view controller for a custom keyboard app extension.

class UILexicon

A read-only array of term pairs, each in a lexicon entry object, for a custom keyboard.


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uitextdocumentproxy)


https://developer.apple.com/documentation/uikit/uiinputviewaudiofeedback)


https://developer.apple.com/documentation/uikit/uiinputviewcontroller)


https://developer.apple.com/documentation/uikit/uilexicon)


https://developer.apple.com/documentation/uikit/uilexiconentry)


https://developer.apple.com/documentation/uikit/customizing-the-behavior-of-segue-based-presentations

  • UIKit
  • Resource management
  • Customizing the behavior of segue-based presentations

Article

Customizing the behavior of segue-based presentations

Pass data between view controllers during a segue, and programmatically control when segues occur.

Overview

When the user triggers a segue, UIKit presents the view controller using the options found in your storyboard. UIKit also provides opportunities for you to modify the segue process dynamically, either by preventing the segue from occurring or by doing extra work when a segue occurs.

For information on how to create a segue, see Specify presentations visually in your storyboard file.

Configure the presentation style of the transition

The segues type determines what kind of animations UIKit uses when presenting and dismissing the segue, as the table below shows. You specify the type when you create the segue, but you can also change it in the attributes inspector later.

Segue type Behavior
Show (Push) Displays the view controller modally unless a parent view controller implements the show(_:sender:) action method, in which case that view controller defines the presentation behavior. For example, a UINavigationController pushes the new view controller onto its navigation stack.
Show Detail (Replace) Displays the view controller modally unless a parent view controller implements the showDetailViewController(_:sender:) action method, in which case that view controller defines the presentation behavior. For example, a UISplitViewController replaces its second child view controller (the detail controller) with the new view controller.
Present Modally Displays the view controller modally using the specified presentation and transition styles.
Present as Popover In a horizontally regular environment, UIKit presents the view controller in a popover. In a horizontally compact environment, UIKit presents the view controller modally.

For more information about how UIKit performs segues involving the Show and Show Detail presentation styles, see Let the current context define the presentation technique.

Prevent a segue based on dynamic conditions

When you dont want the user to leave the current view controller, tell UIKit not to perform a segue by returning false from the shouldPerformSegue(withIdentifier:sender:) method of the source view controller. Use that method to perform any checks you need to determine whether the segue can proceed. For example, return false if the view controllers content is invalid and requires corrective user actions. Returning true lets the segue continue, but returning false causes the segue to fail silently.

Pass data to the presented view controller

Because UIKit creates and presents the view controller automatically during a segue, use the prepare(for:sender:) method to pass any data to that view controller before the segue occurs. Implement the method on the view controller containing the object that initiated the segue. Fetch the new view controller from the provided UIStoryboardSegue object, along with information about which segue was triggered.

In the following code example, the current view controller fetches the image associated with the selected table row and passes that image to the new view controller.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller. if let imageVC = segue.destination as? ImageViewController {

// Fetch the image for the selected row. let image = getImageForSelectedRow() imageVC.currentImage = image } }

Use the delegate design pattern to pass data from a presented view controller ) method.

Understand the sequence of events during a segue

Although UIKit handles segues automatically, there are many places where you can perform work related to displaying the new view controller. The following figure shows the flow of events that happens from the time the user triggers a segue until the process is complete. The main place to perform perform segue-related actions is the current view controllers prepare(for:sender:) method, but you also may perform tasks during the creation of the new view controller.

See Also

Storyboards

Dismissing a view controller with an unwind segue

Configure an unwind segue in your storyboard file that dynamically chooses the most appropriate view controller to display next.

class UIStoryboard

An encapsulation of the design-time view controller graph represented in an Interface Builder storyboard resource file.

class UIStoryboardSegue

An object that prepares for and performs the visual transition between two view controllers.

class UIStoryboardUnwindSegueSource

An encapsulation of information about an unwind segue.


https://developer.apple.com/documentation/uikit/dismissing-a-view-controller-with-an-unwind-segue


https://developer.apple.com/documentation/uikit/uistoryboard

  • UIKit
  • UIStoryboard

Class

UIStoryboard

An encapsulation of the design-time view controller graph represented in an Interface Builder storyboard resource file.

tvOSvisionOS 1.01.0Deprecated

@MainActor class UIStoryboard

Mentioned in

Displaying and managing views with a view controller

Overview

A UIStoryboard object manages archived versions of your apps view controllers. At design time, you configure the content of your view controllers visually, and Xcode saves the data needed to recreate that interface in a storyboard file in your apps bundle. When you want to create a new view controller programmatically, first create a UIStoryboard object and specify the appropriate name and bundle information. Then use that object to instantiate the specific view controller that you want.

During the instantiation process, UIStoryboard creates your view controller programmatically using its doc://com.apple.documentation/documentation/oslog/oslogentry/init(coder:) method. The storyboard passes the view controllers data archive to that method, which then uses the data to recreate the state of the view controller and its views. If you have a custom initialization method for your view controller, you can ask the storyboard to instantiate your view controller using a block you provide. You can use this block to call your custom initialization method, passing any extra data your view controller needs.

For visionOS apps, you can load existing storyboards, but you cant add content specific to the platform. Migrate your interface code to SwiftUI as soon as possible.

Topics

Getting a Storyboard Object

init(name: String, bundle: Bundle?)

Creates and returns a storyboard object for the specified resource file.

Loading the Initial View Controller

Creates the initial view controller and initializes it with the data from the storyboard.

Creates the initial view controller from the storyboard and initializes it using your custom initialization code.

Instantiating Storyboard View Controllers

Creates the view controller with the specified identifier and initializes it with the data from the storyboard.

Creates the specified view controller from the storyboard and initializes it using your custom initialization code.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Storyboards

Customizing the behavior of segue-based presentations

Pass data between view controllers during a segue, and programmatically control when segues occur.

Dismissing a view controller with an unwind segue

Configure an unwind segue in your storyboard file that dynamically chooses the most appropriate view controller to display next.

class UIStoryboardSegue

An object that prepares for and performs the visual transition between two view controllers.

class UIStoryboardUnwindSegueSource

An encapsulation of information about an unwind segue.


https://developer.apple.com/documentation/uikit/uistoryboardsegue


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource

  • UIKit
  • UIStoryboardUnwindSegueSource

Class

UIStoryboardUnwindSegueSource

An encapsulation of information about an unwind segue.

@MainActor class UIStoryboardUnwindSegueSource

Overview

You dont create instances of this class yourself. UIKit creates an unwind segue source object in response to the triggering of an unwind segue. It passes the source object to other view controller methods that determine the destination of the unwind segue. The information in an unwind segue source object includes the view controller being dismissed by the segue and the action method responsible for the dismissal.

Topics

Getting the unwind segue attributes

var source: UIViewController

The view controller being dismissed by the unwind segue.

var unwindAction: Selector

The action method associated with the unwind segue.

var sender: Any?

The object that performed the unwind action.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Storyboards

Customizing the behavior of segue-based presentations

Pass data between view controllers during a segue, and programmatically control when segues occur.

Dismissing a view controller with an unwind segue

Configure an unwind segue in your storyboard file that dynamically chooses the most appropriate view controller to display next.

class UIStoryboard

An encapsulation of the design-time view controller graph represented in an Interface Builder storyboard resource file.

class UIStoryboardSegue

An object that prepares for and performs the visual transition between two view controllers.


https://developer.apple.com/documentation/uikit/uiimageasset

  • UIKit
  • UIImageAsset

Class

UIImageAsset

A container for a collection of images that represent multiple ways of describing a single piece of artwork.

tvOS

class UIImageAsset

Overview

A common use case for UIImageAsset is the grouping of multiple images of the same item at different display scales. Image asset objects arent assigned to instances of UIImage rather; UIImage provides an asset when multiple representations of an image are available. Images retrieved from image asset catalogs using the init(named:) or init(named:in:compatibleWith:) methods automatically have an image asset object that allows access to other images from the catalog.

Register an image

When you register an image with an image asset, you associate a UITraitCollection object with the image. The trait collection must contain the displayScale and userInterfaceIdiom trait properties. If you dont define these traits in the trait collection, the following defaults are assigned:

  • displayScale = 1.0

  • userInterfaceIdiom = UIUserInterfaceIdiom.unspecified

For example, if you create a trait collection that only contains a horizontal size class, the default display scale and idiom are added when the image is registered.

Retrieve an image

When you retrieve or unregister an image from an image asset, you do so using the trait collection that was used to register the image. To ensure the correct image is retrieved, the trait collection used must contain the displayScale and userInterfaceIdiom traits. If these traits arent defined in the trait collection, the following defaults are assigned:

  • displayScale = scale of the current device

  • userInterfaceIdiom = the type of interface used on the current device

For example, if you create a trait collection that only contains a horizontal size class, the default display scale and idiom of the current device are added when searching the UIImageAsset for an image.

UIImageView automatically retrieves the correct image when traitCollectionDidChange(_:) is called on it.

Topics

Initializing an image asset

init()

Creates a new image asset object.

init?(coder: NSCoder)

Creates an image asset from data in an unarchiver.

Registering and unregistering images

func register(UIImage, with: UITraitCollection)

Registers an image with the specified trait collection.

func register(UIImage, with: UIImage.Configuration)

Registers an image with the specified image configuration details.

func unregister(imageWith: UITraitCollection)

Unregisters the image with the specified trait collection from the image asset.

func unregisterImage(with: UIImage.Configuration)

Unregisters the image with the specified image configuration details from the image asset.

Retrieving an image from an image asset

Retrieves the variant of the image that best matches the specified trait collection.

Retrieves the variant of the image that best matches the specified image configuration details.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype

See Also

Assets

class NSDataAsset

An object from a data set type stored in an asset catalog.


https://developer.apple.com/documentation/uikit/nsdataasset

  • UIKit
  • NSDataAsset

Class

NSDataAsset

An object from a data set type stored in an asset catalog.

class NSDataAsset

Overview

The objects content is stored as a set of one or more files with associated device attributes. These sets can also be tagged for use as on-demand resources.

Initialize data assets

Data assets are initialized from a named data set in an asset catalog. You create data sets during app development. Each data set contains one or more data files. Each file has associated attributes for features of the device, including the minimum amount of memory and the version of Metal. When you initialize the data asset, the system selects the data file that best matches the current device.

For more information on the data set type in an asset catalog, see Data Set Type in Asset Catalog Format Reference. For information on asset catalogs, see Managing assets with asset catalogs.

Access the data

You access the data file by using the data property. Because the property is of type NSData it provides methods for accessing the raw data only as bytes and ranges of bytes.

To access structured data, convert the bytes into the appropriate format. The system can convert some data types for you. One example is XML data using the init(data:) method of XMLParser. Other data types require code for parsing and converting the raw data. You may need to convert larger data files incrementally.

Topics

Initializing the data asset

convenience init?(name: NSDataAssetName)

Initializes and returns an object with a reference to the named data asset in an asset catalog.

init?(name: NSDataAssetName, bundle: Bundle)

Initializes and returns an object with a reference to the named data asset thats in an asset catalog in the specified bundle.

Accessing data

var data: Data

The raw data values in the data asset.

Getting data asset information

var name: NSDataAssetName

The name of the data set in the asset catalog.

typealias NSDataAssetName

The name of a data asset.

var typeIdentifier: String

The uniform type identifier for the data asset.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable
  • SendableMetatype

See Also

Assets

class UIImageAsset

A container for a collection of images that represent multiple ways of describing a single piece of artwork.


https://developer.apple.com/documentation/uikit/uinib

  • UIKit
  • UINib

Class

UINib

An object that contains Interface Builder nib files.

tvOSvisionOS 1.01.0Deprecated

@MainActor class UINib

Overview

A UINib object caches the contents of a nib file in memory, ready for unarchiving and instantiation. When your app needs to instantiate the contents of the nib file, it can do so without having to load the data from the nib file first, which improves performance. The UINib object can automatically release this cached nib data to free up memory for your app under low-memory conditions, reloading that data the next time your app instantiates the nib.

Your app should use UINib objects whenever it needs to repeatedly instantiate the same nib data. For example, if your table view uses a nib file to instantiate table view cells, caching the nib in a UINib object can improve performance.

When you create a UINib object using the contents of a nib file, the object loads the object graph in the referenced nib file, but it doesnt unarchive it yet. To unarchive all of the nib data and instantiate the nib, your app calls the instantiate(withOwner:options:) method. For more information about the steps that the UINib object follows to instantiate the nibs object graph, see Resource Programming Guide.

Topics

Creating a nib object

init(nibName: String, bundle: Bundle?)

Returns a nib object from the nib file in the specified bundle.

init(data: Data, bundle: Bundle?)

Creates a nib object from nib data stored in memory.

Retrieving objects from the nib file

Unarchives and instantiates the in-memory contents of the nib objects nib file, creating a distinct object tree and set of top-level objects.

struct OptionsKey

Options that specify how to unarchive and instantiate the nib.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

https://developer.apple.com/documentation/uikit/customizing-the-behavior-of-segue-based-presentations)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/dismissing-a-view-controller-with-an-unwind-segue)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uistoryboard)


https://developer.apple.com/documentation/uikit/uistoryboardsegue)


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource)


https://developer.apple.com/documentation/uikit/uiimageasset)


https://developer.apple.com/documentation/uikit/nsdataasset)


https://developer.apple.com/documentation/uikit/uinib)


https://developer.apple.com/documentation/uikit/uiuseractivityrestoring

  • UIKit
  • UIUserActivityRestoring

Protocol

UIUserActivityRestoring

The protocol you adopt to restore an objects state from a user activity.

tvOS

@MainActor protocol UIUserActivityRestoring : NSObjectProtocol

Topics

Restoring user activity state

func restoreUserActivityState(NSUserActivity)

Restores the state necessary to continue the specified user activity.

Required

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIAccessibilityElement
  • UIActionSheet
  • UIActivityIndicatorView
  • UIActivityViewController
  • UIAlertController
  • UIAlertView
  • UIApplication
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICloudSharingController
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewController
  • UICollectionViewListCell
  • UIColorPickerViewController
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDocument
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIEventAttributionView
  • UIFontPickerViewController
  • UIImagePickerController
  • UIImageView
  • UIInputView
  • UIInputViewController
  • UILabel
  • UIListContentView
  • UIManagedDocument
  • UINavigationBar
  • UINavigationController
  • UIPageControl
  • UIPageViewController
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIReferenceLibraryViewController
  • UIRefreshControl
  • UIResponder
  • UIScene
  • UIScrollView
  • UISearchBar
  • UISearchContainerViewController
  • UISearchController
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UISplitViewController
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarController
  • UITableView
  • UITableViewCell
  • UITableViewController
  • UITableViewHeaderFooterView
  • UITextField
  • UITextFormattingViewController
  • UITextView
  • UIToolbar
  • UIVideoEditorController
  • UIView
  • UIViewController
  • UIVisualEffectView
  • UIWebView
  • UIWindow
  • UIWindowScene

See Also

User activities

class NSUserActivity

A representation of the state of your app at a moment in time.


https://developer.apple.com/documentation/uikit/uiactivity

  • UIKit
  • UIActivity

Class

UIActivity

An abstract class that you subclass to implement app-specific services.

class UIActivity

Mentioned in

Adding custom actions and activities

Overview

You should subclass UIActivity only if you want to provide custom services to people. A service takes data thats passed to it, does something to that data, and returns the results. For example, a social media service might take whatever text, images, or other content is provided to it and post them to a persons account. Activity objects are used in conjunction with a UIActivityViewController object, which is responsible for presenting services to people.

The system already provides support for many standard services and makes them available through the UIActivityViewController object. For example, the standard activity view controller supports emailing data, posting items to one of a persons social media accounts, and several other options. You dont have to provide custom services for any of the built-in types.

Subclassing notes

This class must be subclassed before it can be used. The job of an activity object is to act on the data provided to it and to provide some meta information that iOS can display to people. For more complex services, an activity object can also display a custom user interface and use it to gather additional information from people.

Methods to override

When subclassing, you must always override the following methods and use them to provide information about your service:

  • activityType

  • activityTitle

  • activityImage

  • canPerform(withActivityItems:)

  • prepare(withActivityItems:)

  • activityCategory

If your canPerform(withActivityItems:) method indicates that your subclass is able to operate on the specified data, the active UIActivityViewController object displays your service to people. When a person selects your service, the activity view controller calls the prepare(withActivityItems:) method followed by only one of these methods:

  • activityViewController — Returns a view controller to present to a person. If your service requires additional input from a person, override this method and use it to return the view controller object responsible for presenting your custom UI. (You dont need to present the view controller yourself.) After your view controller object gathers the needed input, its responsible for initiating the task associated with the service.

  • perform() — Performs the service without displaying any additional UI. If your service doesnt need additional input from a person, override this method and perform the task associated with the service.

Topics

Getting the activity information

class var activityCategory: UIActivity.Category

The category of the activity, which may be used to group activities in the UI.

enum Category

An enumeration that defines categories of activities.

var activityType: UIActivity.ActivityType?

The type of service being provided.

struct ActivityType

A structure that describes the types of activities for which the system has built-in support.

var activityTitle: String?

A user-readable string that describes the service.

var activityImage: UIImage?

An image that identifies the service to the user.

Performing the activity

Queries whether the service can act on the specified data items.

func prepare(withActivityItems: [Any])

Prepares your service to act on the specified data.

var activityViewController: UIViewController?

The view controller to present to the user.

func perform()

Performs the service when no custom view controller is provided.

func activityDidFinish(Bool)

Notifies the system that your activity object has completed its work.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol

See Also

Services

class UIActivityViewController

A view controller that you use to offer standard services from your app.

protocol UIActivityItemSource

A set of methods that an activity view controller uses to retrieve the data items to act on.

class UIActivityItemProvider

A proxy for data that passes to an activity view controller.


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller

  • UIKit
  • UIActivityViewController

Class

UIActivityViewController

A view controller that you use to offer standard services from your app.

@MainActor class UIActivityViewController

Mentioned in

Collaborating and sharing copies of your data

Overview

The system provides several standard services, such as copying items to the pasteboard, posting content to social media sites, sending items via email or SMS, and more. Apps can also define custom services.

Your app is responsible for configuring, presenting, and dismissing this view controller. Configuration for the view controller involves specifying the data objects on which the view controller should act. (You can also specify the list of custom services your app supports.) When presenting the view controller, you must do so using the appropriate means for the current device. On iPad, you must present the view controller in a popover. On iPhone and iPod touch, you must present it modally.

Topics

Initializing the activity view controller

init(activityItems: [Any], applicationActivities: [UIActivity]?)

Initializes a new activity view controller object that acts on the specified data.

convenience init(activityItemsConfiguration: any UIActivityItemsConfigurationReading)

Initializes a new activity view controller object that acts on the specified configuration.

class UIActivityItemsConfiguration

A configuration that allows a responder to export data through a variety of interactions.

protocol UIActivityItemsConfigurationReading

A set of methods adopted by an object so that the object can act as an activity items configuration.

Accessing the completion handler

var completionWithItemsHandler: UIActivityViewController.CompletionWithItemsHandler?

The completion handler to execute after the activity view controller is dismissed.

typealias CompletionWithItemsHandler

A completion handler to execute after the activity view controller is dismissed.

Excluding specific activity types

var excludedActivityTypes: [UIActivity.ActivityType]?

The list of services that should not be displayed.

Excluding specific sections

var excludedActivitySectionTypes: UIActivitySectionTypes

struct UIActivitySectionTypes

Elevating a prominent activity

var allowsProminentActivity: Bool

A Boolean value the system uses to elevate a system activity to make it more prominent.

Deprecated

var completionHandler: UIActivityViewController.CompletionHandler?

Deprecated

typealias CompletionHandler

Relationships

Inherits From

  • UIViewController

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSExtensionRequestHandling
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIAppearanceContainer
  • UIContentContainer
  • UIFocusEnvironment
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIStateRestoring
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Services

class UIActivity

An abstract class that you subclass to implement app-specific services.

protocol UIActivityItemSource

A set of methods that an activity view controller uses to retrieve the data items to act on.

class UIActivityItemProvider

A proxy for data that passes to an activity view controller.


https://developer.apple.com/documentation/uikit/uiactivityitemsource

  • UIKit
  • UIActivityItemSource

Protocol

UIActivityItemSource

A set of methods that an activity view controller uses to retrieve the data items to act on.

tvOS

protocol UIActivityItemSource : NSObjectProtocol

Overview

You can use this protocol in situations where you want to provide the data from one of your apps existing objects instead of creating a separate UIActivityItemProvider object. When implementing this protocol, your object becomes the data provider, providing the view controller with access to the items.

Because the methods of this protocol are executed on your apps main thread, you should avoid using this protocol in cases where the data objects might take a significant amount of time to create. When creating large data objects, consider using a UIActivityItemProvider object instead.

Topics

Getting the data items

Returns the placeholder object for the data.

Required

Returns the data object to be acted upon.

Providing information about the data items

For activities that support a subject field, returns the subject for the item.

For items that are provided as data, returns the UTI for the item.

For activities that support a preview image, returns a thumbnail preview image for the item.

Providing metadata for accelerated previews

Returns metadata to display in the preview header of the share sheet.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIActivityItemProvider

See Also

Services

class UIActivity

An abstract class that you subclass to implement app-specific services.

class UIActivityViewController

A view controller that you use to offer standard services from your app.

class UIActivityItemProvider

A proxy for data that passes to an activity view controller.


https://developer.apple.com/documentation/uikit/uiactivityitemprovider

  • UIKit
  • UIActivityItemProvider

Class

UIActivityItemProvider

A proxy for data that passes to an activity view controller.

class UIActivityItemProvider

Overview

You can use a provider object in situations where you want to make data available for use by an activity but you want to delay providing that data until its actually needed. For example, you might use a provider object to represent a large video file that needs to be processed before it can be shared to a users social media account.

When you initialize a UIActivityViewController object, you can pass a provider object in addition to any other data objects. When the user selects an activity, the activity view controller adds your provider object (which is also an operation object) to an operation queue so that it can begin to gather or process the needed data.

Subclassing notes

You must subclass UIActivityItemProvider and implement its item method, which is called to generate the item data. You implement this method instead of the normal main() method youd implement for an operation object. (The main() method calls the item method when the operation object is executed.) Your implementation of the item method should do whatever work is necessary to create and return the data.

Topics

Initializing the provider

init(placeholderItem: Any)

Initializes and returns a provider object with the specified placeholder data.

Accessing the provider attributes

var item: Any

Generates and returns the actual data-bearing object.

var placeholderItem: Any?

The placeholder object you specified at initialization time.

var activityType: UIActivity.ActivityType?

The type of the activity object that is expecting the data.

Relationships

Inherits From

  • Operation

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable
  • SendableMetatype
  • UIActivityItemSource

See Also

Services

class UIActivity

An abstract class that you subclass to implement app-specific services.

class UIActivityViewController

A view controller that you use to offer standard services from your app.

protocol UIActivityItemSource

A set of methods that an activity view controller uses to retrieve the data items to act on.


https://developer.apple.com/documentation/uikit/uiuseractivityrestoring)


https://developer.apple.com/documentation/uikit/uiactivity)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller)


https://developer.apple.com/documentation/uikit/uiactivityitemsource)


https://developer.apple.com/documentation/uikit/uiactivityitemprovider)


https://developer.apple.com/documentation/uikit/uiviewcontroller

  • UIKit
  • UIViewController

Class

UIViewController

An object that manages a view hierarchy for your UIKit app.

tvOS

@MainActor class UIViewController

Mentioned in

Displaying and managing views with a view controller

Using responders and the responder chain to handle events

Responding to memory warnings

Creating a custom container view controller

Overview

The UIViewController class defines the shared behavior thats common to all view controllers. You rarely create instances of the UIViewController class directly. Instead, you subclass UIViewController and add the methods and properties needed to manage the view controllers view hierarchy.

A view controllers main responsibilities include the following:

  • Updating the contents of the views, usually in response to changes to the underlying data

  • Responding to user interactions with views

  • Resizing views and managing the layout of the overall interface

  • Coordinating with other objects — including other view controllers — in your app

A view controller is tightly bound to the views it manages and takes part in handling events in its view hierarchy. Specifically, view controllers are UIResponder objects and are inserted into the responder chain between the view controllers root view and that views superview, which typically belongs to a different view controller. If none of the view controllers views handle an event, the view controller has the option of handling the event or passing it along to the superview.

View controllers are rarely used in isolation. Instead, you often use multiple view controllers, each of which owns a portion of your apps user interface. For example, one view controller might display a table of items while a different view controller displays the selected item from that table. Usually, only the views from one view controller are visible at a time. A view controller may present a different view controller to display a new set of views, or it may act as a container for other view controllers content and animate views however it wants.

Subclassing notes

Every app contains at least one custom subclass of UIViewController. More often, apps contain many custom view controllers. Custom view controllers define the overall behaviors of your app, including the apps appearance and how it responds to user interactions. The following sections provide a brief overview of some of the tasks your custom subclass performs. For detailed information about using and implementing view controllers, see View Controller Programming Guide for iOS.

Manage views

Each view controller manages a view hierarchy, the root view of which is stored in the view property of this class. The root view acts primarily as a container for the rest of the view hierarchy. The size and position of the root view is determined by the object that owns it, which is either a parent view controller or the apps window. The view controller thats owned by the window is the apps root view controller and its view is sized to fill the window.

View controllers load their views lazily. Accessing the view property for the first time loads or creates the view controllers views. There are several ways to specify the views for a view controller:

  • Specify the view controller and its views in your apps storyboard. Storyboards are the preferred way to specify your views. With a storyboard, you specify the views and their connections to the view controller. You also specify the relationships and segues between your view controllers, which makes it easier to see and modify your apps behavior.

To load a view controller from a storyboard, call the instantiateViewController(withIdentifier:) method of the appropriate UIStoryboard object. The storyboard object creates the view controller and returns it to your code.

  • Specify the views for a view controller using a nib file. A nib file lets you specify the views of a single view controller but doesnt let you define segues or relationships between view controllers. The nib file also stores only minimal information about the view controller itself.

To initialize a view controller object using a nib file, create your view controller class programmatically and initialize it using the init(nibName:bundle:) method. When its views are requested, the view controller loads them from the nib file.

  • Specify the views for a view controller using the loadView() method. In that method, create your view hierarchy programmatically and assign the root view of that hierarchy to the view controllers view property.

All of these techniques have the same end result, which is to create the appropriate set of views and expose them through the view property.

A view controllers root view is always sized to fit its assigned space. For other views in your view hierarchy, use Interface Builder to specify the Auto Layout constraints that govern how each view is positioned and sized within its superviews bounds. You can also create constraints programmatically and add them to your views at appropriate times. For more information about how to create constraints, see Auto Layout Guide.

When the visibility of its views changes, a view controller automatically calls its own methods so that subclasses can respond to the change. Use a method like viewIsAppearing(_:) to prepare your views to appear onscreen, and use viewWillDisappear(_:) to save changes or other state information. Use other methods to make appropriate changes.

The following image shows the possible visible states for a view controllers views and the state transitions that can occur. Not all will callback methods are paired with only a did callback method. You need to ensure that if you start a process in a will callback method, you end the process in both the corresponding did and the opposite will callback method.

Handle view rotations

As of iOS 8, all rotation-related methods are deprecated. Instead, rotations are treated as a change in the size of the view controllers view and are therefore reported using the viewWillTransition(to:with:) method. When the interface orientation changes, UIKit calls this method on the windows root view controller. That view controller then notifies its child view controllers, propagating the message throughout the view controller hierarchy.

In iOS 6 and iOS 7, your app supports the interface orientations defined in your apps Info.plist file. A view controller can override the supportedInterfaceOrientations method to limit the list of supported orientations. Typically, the system calls this method only on the root view controller of the window or a view controller presented to fill the entire screen; child view controllers use the portion of the window provided for them by their parent view controller and no longer participate directly in decisions about what rotations are supported. The intersection of the apps orientation mask and the view controllers orientation mask is used to determine which orientations a view controller can be rotated into.

You can override the preferredInterfaceOrientationForPresentation for a view controller thats intended to be presented full screen in a specific orientation.

When a rotation occurs for a visible view controller, the willRotate(to:duration:), willAnimateRotation(to:duration:), and didRotate(from:) methods are called during the rotation. The viewWillLayoutSubviews() method is also called after the view is resized and positioned by its parent. If a view controller isnt visible when an orientation change occurs, then the rotation methods are never called. However, the viewWillLayoutSubviews() method is called when the view becomes visible.

Implement a container view controller

A custom UIViewController subclass can also act as a container view controller. A container view controller manages the presentation of content of other view controllers it owns, also known as its child view controllers. A childs view can be presented as-is or in conjunction with views owned by the container view controller.

Your container view controller subclass should declare a public interface to associate its children. The nature of these methods is up to you and depends on the semantics of the container youre creating. You need to decide how many children can be displayed by your view controller at once, when those children are displayed, and where they appear in your view controllers view hierarchy. Your view controller class defines what relationships, if any, are shared by the children. By establishing a clean public interface for your container, you ensure that children use its capabilities logically, without accessing too many private details about how your container implements the behavior.

Your container view controller must associate a child view controller with itself before adding the childs root view to the view hierarchy. This allows iOS to properly route events to child view controllers and the views those controllers manage. Likewise, after it removes a childs root view from its view hierarchy, it should disconnect that child view controller from itself. To make or break these associations, your container calls specific methods defined by the base class. These methods arent intended to be called by clients of your container class; they are to be used only by your containers implementation to provide the expected containment behavior.

Here are the essential methods you might need to call:

  • addChild(_:)

  • removeFromParent()

  • willMove(toParent:)

  • didMove(toParent:)

Manage memory

Memory is a critical resource in iOS, and view controllers provide built-in support for reducing their memory footprint at critical times. The UIViewController class provides some automatic handling of low-memory conditions through its didReceiveMemoryWarning() method, which releases unneeded memory.

Support state preservation and restoration

If you assign a value to the view controllers restorationIdentifier property, the system may ask the view controller to encode itself when the app transitions to the background. When preserved, a view controller preserves the state of any views in its view hierarchy that also have restoration identifiers. View controllers dont automatically save any other state. If youre implementing a custom container view controller, you must encode any child view controllers yourself. Each child you encode must have a unique restoration identifier.

For more information about how the system determines which view controllers to preserve and restore, see App Programming Guide for iOS. To see an example of state preservation and restoration, see Restoring your apps state.

Topics

Creating a view controller

init(nibName: String?, bundle: Bundle?)

Creates a view controller with the nib file in the specified bundle.

init?(coder: NSCoder)

Creates a view controller with data in an unarchiver.

Getting the storyboard and nib information

var storyboard: UIStoryboard?

The storyboard from which the view controller originated.

var nibName: String?

The name of the view controllers nib file, if one was specified.

var nibBundle: Bundle?

The view controllers nib bundle if it exists.

Managing the view

var view: UIView!

The view that the controller manages.

var viewIfLoaded: UIView?

The view controllers view, or nil if the view isnt yet loaded.

var isViewLoaded: Bool

A Boolean value indicating whether the view is currently loaded into memory.

func loadView()

Creates the view that the controller manages.

func viewDidLoad()

Called after the controllers view is loaded into memory.

func loadViewIfNeeded()

Loads the view controllers view if its not loaded yet.

var title: String?

A localized string that represents the view this controller manages.

var preferredContentSize: CGSize

The preferred size for the view controllers view.

func viewWillAppear(Bool)

Notifies the view controller that its view is about to be added to a view hierarchy.

func viewIsAppearing(Bool)

Notifies the view controller that the system is adding the view controllers view to a view hierarchy.

func viewDidAppear(Bool)

Notifies the view controller that its view was added to a view hierarchy.

func viewWillDisappear(Bool)

Notifies the view controller that its view is about to be removed from a view hierarchy.

func viewDidDisappear(Bool)

Notifies the view controller that its view was removed from a view hierarchy.

var isBeingDismissed: Bool

A Boolean value indicating whether the view controller is in the process of being dismissed by one of its ancestors.

var isBeingPresented: Bool

A Boolean value indicating whether the view controller in the process of being presented by one of its ancestors.

var isMovingFromParent: Bool

A Boolean value indicating whether the view controller is moving from a parent view controller.

var isMovingToParent: Bool

A Boolean value indicating whether the view controller is moving to a parent view controller.

Extending the views safe area

Positioning content relative to the safe area

Position views so that they arent obstructed by other content.

var additionalSafeAreaInsets: UIEdgeInsets

Custom insets that you specify to modify the view controllers safe area.

func viewSafeAreaInsetsDidChange()

Called to notify the view controller that the safe area insets of its root view changed.

Managing the views margins

Positioning content within layout margins

Position views so that they arent crowded by other content.

var viewRespectsSystemMinimumLayoutMargins: Bool

A Boolean value indicating whether the view controllers view uses the system-defined minimum layout margins.

var systemMinimumLayoutMargins: NSDirectionalEdgeInsets

The minimum layout margins for the view controllers root view.

func viewLayoutMarginsDidChange()

Called to notify the view controller that the layout margins of its root view changed.

Configuring the views layout behavior

var edgesForExtendedLayout: UIRectEdge

The edges that you extend for your view controller.

struct UIRectEdge

Constants that specify the edges of a rectangle.

var extendedLayoutIncludesOpaqueBars: Bool

A Boolean value indicating whether or not the extended layout includes opaque bars.

func viewWillLayoutSubviews()

Notifies the view controller that its view is about to lay out its subviews.

func viewDidLayoutSubviews()

Notifies the view controller when its view finishes laying out its subviews.

func updateViewConstraints()

Notifies the view controller when its view needs to update its constraints.

Configuring the view rotation settings

var supportedInterfaceOrientations: UIInterfaceOrientationMask

The interface orientations that the view controller supports.

var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation

The interface orientation to use when presenting the view controller.

func setNeedsUpdateOfSupportedInterfaceOrientations()

Notifies the view controller about a change in supported interface orientations or preferred interface orientation for presentation.

var prefersInterfaceOrientationLocked: Bool

Whether this view controller prefers the scenes interface orientation to be locked when shown. The default is NO. Note that this preference may or may not be honored. See UIWindowScene.Geometry for the current state of interface orientation lock.

Beta

func setNeedsUpdateOfPrefersInterfaceOrientationLocked()

Call whenever the view controllers preference for interface orientation lock has changed

var childViewControllerForInterfaceOrientationLock: UIViewController?

Override to return a child view controller or nil. If non-nil, that view controllers preference for interface orientation lock will be used. If nil, self is used. Whenever the return value changes, call setNeedsUpdateOfPrefersInterfaceOrientationLocked().

Performing segues

Determines whether the segue with the specified identifier should be performed.

func prepare(for: UIStoryboardSegue, sender: Any?)

Notifies the view controller that a segue is about to be performed.

func performSegue(withIdentifier: String, sender: Any?)

Initiates the segue with the specified identifier from the current view controllers storyboard file.

Returns an array of child view controllers to search for an unwind segue destination.

Returns the child view controller that contains the source of the unwind segue.

Called on a view controller to determine whether it responds to an unwind action.

func unwind(for: UIStoryboardSegue, towards: UIViewController)

Called when an unwind segue transitions to a new view controller.

Presenting a view controller

func show(UIViewController, sender: Any?)

Presents a view controller in a primary context.

func showDetailViewController(UIViewController, sender: Any?)

Presents a view controller in a secondary (or detail) context.

Presents a view controller modally.

Dismisses the view controller that was presented modally by the view controller.

var modalPresentationStyle: UIModalPresentationStyle

The presentation style for modal view controllers.

enum UIModalPresentationStyle

Modal presentation styles available when presenting view controllers.

var modalTransitionStyle: UIModalTransitionStyle

The transition style to use when presenting the view controller.

enum UIModalTransitionStyle

Transition styles available when presenting view controllers.

var isModalInPresentation: Bool

A Boolean value indicating whether the view controller enforces a modal behavior.

var definesPresentationContext: Bool

A Boolean value that indicates whether this view controllers view is covered when the view controller or one of its descendants presents a view controller.

var providesPresentationContextTransitionStyle: Bool

A Boolean value that indicates whether the view controller specifies the transition style for view controllers it presents.

var disablesAutomaticKeyboardDismissal: Bool

Returns a Boolean indicating whether the current input view is dismissed automatically when changing controls.

class let showDetailTargetDidChangeNotification: NSNotification.Name

Posted when a split view controller is expanded or collapsed.

Adding a custom transition or presentation

var transitioningDelegate: (any UIViewControllerTransitioningDelegate)?

The delegate object that provides transition animator, interactive controller, and custom presentation controller objects.

var transitionCoordinator: (any UIViewControllerTransitionCoordinator)?

Returns the active transition coordinator object.

Returns the view controller that responds to the action.

var presentationController: UIPresentationController?

The presentation controller thats managing the current view controller.

var popoverPresentationController: UIPopoverPresentationController?

The nearest popover presentation controller that is managing the current view controller.

var sheetPresentationController: UISheetPresentationController?

The sheet presentation controller for the view controller.

var activePresentationController: UIPresentationController?

The presentation controller thats managing the view controller.

var restoresFocusAfterTransition: Bool

A Boolean value that indicates whether an item that previously was focused should again become focused when the items view controller becomes visible and focusable.

Customizing and resizing sheets in UIKit

Discover how to create a layered and customized sheet experience in UIKit.

Adapting to environment changes

func collapseSecondaryViewController(UIViewController, for: UISplitViewController)

Called when a split view controller transitions to a compact-width size class.

Called when a split view controller transitions to a regular-width size class.

Adjusting the interface style

var overrideUserInterfaceStyle: UIUserInterfaceStyle

The user interface style adopted by the view controller and all of its children.

var preferredUserInterfaceStyle: UIUserInterfaceStyle

The preferred interface style for this view controller.

var childViewControllerForUserInterfaceStyle: UIViewController?

The child view controller that supports the preferred user interface style.

func setNeedsUserInterfaceAppearanceUpdate()

Notifies the view controller that a change occurred that might affect the preferred interface style.

enum UIUserInterfaceStyle

Constants that indicate the interface style for the app.

Observing trait changes

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

Overriding trait values

var traitOverrides: UITraitOverrides

struct UITraitOverrides

Managing child view controllers in a custom container

var children: [UIViewController]

An array of view controllers that are children of the current view controller.

func addChild(UIViewController)

Adds the specified view controller as a child of the current view controller.

func removeFromParent()

Removes the view controller from its parent.

Transitions between two of the view controllers child view controllers.

var shouldAutomaticallyForwardAppearanceMethods: Bool

Returns a Boolean value indicating whether appearance methods are forwarded to child view controllers.

func beginAppearanceTransition(Bool, animated: Bool)

Tells a child controller its appearance is about to change.

func endAppearanceTransition()

Tells a child controller its appearance has changed.

class let hierarchyInconsistencyException: NSExceptionName

Raised if the view controller hierarchy is inconsistent with the view hierarchy.

Responding to containment events

func willMove(toParent: UIViewController?)

Called just before the view controller is added or removed from a container view controller.

func didMove(toParent: UIViewController?)

Called after the view controller is added or removed from a container view controller.

var presentingViewController: UIViewController?

The view controller that presented this view controller.

var presentedViewController: UIViewController?

The view controller that is presented by this view controller, or one of its ancestors in the view controller hierarchy.

var parent: UIViewController?

The parent view controller of the recipient.

var splitViewController: UISplitViewController?

The nearest ancestor in the view controller hierarchy that is a split view controller.

var navigationController: UINavigationController?

The nearest ancestor in the view controller hierarchy that is a navigation controller.

var tabBarController: UITabBarController?

The nearest ancestor in the view controller hierarchy that is a tab bar controller.

Configuring a navigation interface

var navigationItem: UINavigationItem

The navigation item used to represent the view controller in a parents navigation bar.

var hidesBottomBarWhenPushed: Bool

A Boolean value indicating whether the toolbar at the bottom of the screen is hidden when the view controller is pushed on to a navigation controller.

func setToolbarItems([UIBarButtonItem]?, animated: Bool)

Sets the toolbar items to be displayed along with the view controller.

var toolbarItems: [UIBarButtonItem]?

The toolbar items associated with the view controller.

Configuring tab bar content

var tabBarItem: UITabBarItem!

The tab bar item that represents the view controller when added to a tab bar controller.

var tabBarObservedScrollView: UIScrollView?

The full-screen scroll view to synchronize with a scrolling tab bar.

Deprecated

Working with scrolling content

func setContentScrollView(UIScrollView?, for: NSDirectionalRectEdge)

Sets the scroll view that bars observe for the specified edge.

func setContentScrollView(UIScrollView?)

Sets the scroll view that bars observe for all edges of the view.

Returns the scroll view the view controller observes for the specified edge.

Indicating missing content

var contentUnavailableConfiguration: (any UIContentConfiguration)?

The current content-unavailable configuration of the view controller.

var contentUnavailableConfigurationState: UIContentUnavailableConfigurationState

The current configuration state of the content-unavailable view.

func setNeedsUpdateContentUnavailableConfiguration()

Requests that the system update the content-unavailable configuration for the latest state.

func updateContentUnavailableConfiguration(using: UIContentUnavailableConfigurationState)

Updates the content-unavailable configuration for the provided state.

struct UIContentUnavailableConfiguration

A content configuration for a content-unavailable view.

Supporting app extensions

var extensionContext: NSExtensionContext?

Returns the extension context of the view controller.

Coordinating with system gestures

var preferredScreenEdgesDeferringSystemGestures: UIRectEdge

The screen edges for which you want your gestures to take precedence over the system gestures.

var childForScreenEdgesDeferringSystemGestures: UIViewController?

Returns the child view controller that should be queried to see if its gestures should take precedence.

func setNeedsUpdateOfScreenEdgesDeferringSystemGestures()

Notifies the system of changes to the screen edges that defer system gestures.

var prefersHomeIndicatorAutoHidden: Bool

A Boolean that indicates whether the system is allowed to hide the visual indicator for returning to the Home Screen.

var childForHomeIndicatorAutoHidden: UIViewController?

Returns the child view controller that is consulted about its preference for displaying a visual indicator for returning to the Home screen.

func setNeedsUpdateOfHomeIndicatorAutoHidden()

Notifies UIKit that your view controller updated its preference regarding the visual indicator for returning to the Home screen.

Working with transitions

var preferredTransition: UIViewController.Transition?

An object that defines the transition animation when switching to the view controller.

class Transition

An object that defines the transition animation when switching to a new view controller.

Working with focus

var focusGroupIdentifier: String?

The identifier of the focus group that the view controller belongs to.

Managing pointer lock state

var prefersPointerLocked: Bool

A Boolean value that indicates whether the view controller prefers to lock the pointer to a specific scene.

func setNeedsUpdateOfPrefersPointerLocked()

Indicates that the view controller changed the pointer lock preference.

var childViewControllerForPointerLock: UIViewController?

A child view controller to query for the pointer lock preference.

Managing the status bar

var prefersStatusBarHidden: Bool

Specifies whether the view controller prefers the status bar to be hidden or shown.

var childForStatusBarHidden: UIViewController?

The view controller to use for determining the hidden state of the status bar.

var childForStatusBarStyle: UIViewController?

Called when the system needs the view controller to use for determining status bar style.

var preferredStatusBarStyle: UIStatusBarStyle

The preferred status bar style for the view controller.

enum UIStatusBarStyle

Constants that describe the style of the devices status bar.

var modalPresentationCapturesStatusBarAppearance: Bool

Specifies whether a view controller, presented non-fullscreen, takes over control of status bar appearance from the presenting view controller.

var preferredStatusBarUpdateAnimation: UIStatusBarAnimation

Specifies the animation style to use for hiding and showing the status bar for the view controller.

func setNeedsStatusBarAppearanceUpdate()

Indicates to the system that the view controller status bar attributes have changed.

Managing the Touch Bar

var childViewControllerForTouchBar: UIViewController?

The child view controller that the system uses to display content in the Touch Bar.

func setNeedsTouchBarUpdate()

Tells the system to update the Touch Bar.

Accessing the available key commands

var performsActionsWhilePresentingModally: Bool

A Boolean value indicating whether the view controller performs menu-related actions.

func addKeyCommand(UIKeyCommand)

Associates the specified keyboard shortcut with the view controller.

func removeKeyCommand(UIKeyCommand)

Removes the key command from the view controller.

Adding editing behaviors to your view controller

var isEditing: Bool

A Boolean value indicating whether the view controller currently allows the user to edit the view contents.

func setEditing(Bool, animated: Bool)

Sets whether the view controller shows an editable view.

var editButtonItem: UIBarButtonItem

Returns a bar button item that toggles its title and associated state between Edit and Done.

Handling memory warnings

func didReceiveMemoryWarning()

Sent to the view controller when the app receives a memory warning.

Managing state restoration

Restoring your apps state

Provide continuity for the user by preserving current activities.

var restorationIdentifier: String?

The identifier that determines whether the view controller supports state restoration.

var restorationClass: (any UIViewControllerRestoration.Type)?

The class responsible for recreating this view controller when restoring the apps state.

func encodeRestorableState(with: NSCoder)

Encodes state-related information for the view controller.

func decodeRestorableState(with: NSCoder)

Decodes and restores state-related information for the view controller.

func applicationFinishedRestoringState()

Called on restored view controllers after other object decoding is complete.

Logging user interaction intervals

var interactionActivityTrackingBaseName: String?

The base name the view controller uses for logging signposts that annotate user interactions.

Supporting types

struct ViewLoading

A property wrapper that loads the view controllers view before accessing the property.

enum UIContainerBackgroundStyle

Deprecated

Symbols that view controllers no longer support.

Structures

struct ShowDetailTargetDidChangeMessage Beta

Instance Properties

var childViewControllerForPreferredContainerBackgroundStyle: UIViewController?

var ornaments: [UIOrnament]

var preferredContainerBackgroundStyle: UIContainerBackgroundStyle

var tab: UITab?

Instance Methods

func setNeedsUpdateOfPreferredContainerBackgroundStyle()

func setNeedsUpdateProperties()

Call to manually request a properties update for the view controller. Multiple requests may be coalesced into a single update alongside the next layout pass.

func updateProperties()

Override point for subclasses to update properties of this view controller or its view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

func updatePropertiesIfNeeded()

Forces an immediate properties update for this view controller and its view, including any view controllers and views in this subtree.

func updateTraitsIfNeeded()

Relationships

Inherits From

  • UIResponder

Inherited By

  • UIActivityViewController
  • UIAlertController
  • UICloudSharingController
  • UICollectionViewController
  • UIColorPickerViewController
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIFontPickerViewController
  • UIInputViewController
  • UINavigationController
  • UIPageViewController
  • UIReferenceLibraryViewController
  • UISearchContainerViewController
  • UISearchController
  • UISplitViewController
  • UITabBarController
  • UITableViewController
  • UITextFormattingViewController

Conforms To

  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSExtensionRequestHandling
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIAppearanceContainer
  • UIContentContainer
  • UIFocusEnvironment
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIStateRestoring
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Content view controllers

Build a view controller in storyboards, configure it with custom views, and fill those views with your apps data.

Display view controllers using different techniques, and pass data between them during transitions.

class UITableViewController

A view controller that specializes in managing a table view.

class UICollectionViewController

A view controller that specializes in managing a collection view.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.


https://developer.apple.com/documentation/uikit/uitraitenvironment

  • UIKit
  • UITraitEnvironment

Protocol

UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UITraitEnvironment : NSObjectProtocol

Mentioned in

Checking the availability of 3D Touch

Overview

The iOS interface environment includes traits such as horizontal and vertical size class, display scale, and user interface idiom. To access the trait environment of an object that adopts this protocol, use the traitCollection property. The protocol also provides an overridable method that the system calls when the interface environment changes. Implement this method as part of creating an adaptive iOS app.

For more about trait collections, see UITraitCollection. For the WWDC 2014 presentation on creating adaptive interfaces in iOS, see Building Adaptive Apps with UIKit.

Topics

Accessing a trait collection

var traitCollection: UITraitCollection

The traits, such as the size class and scale factor, that describe the current environment of the object.

Required

Responding to a change in the interface environment

func traitCollectionDidChange(UITraitCollection?)

Reports changes in the iOS interface environment.

Deprecated

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIActionSheet
  • UIActivityIndicatorView
  • UIActivityViewController
  • UIAlertController
  • UIAlertView
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICloudSharingController
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewController
  • UICollectionViewListCell
  • UIColorPickerViewController
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIEventAttributionView
  • UIFontPickerViewController
  • UIImagePickerController
  • UIImageView
  • UIInputView
  • UIInputViewController
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UINavigationController
  • UIPageControl
  • UIPageViewController
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIPopoverPresentationController
  • UIPresentationController
  • UIProgressView
  • UIReferenceLibraryViewController
  • UIRefreshControl
  • UIScreen
  • UIScrollView
  • UISearchBar
  • UISearchContainerViewController
  • UISearchController
  • UISearchTextField
  • UISegmentedControl
  • UISheetPresentationController
  • UISlider
  • UISplitViewController
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarController
  • UITableView
  • UITableViewCell
  • UITableViewController
  • UITableViewHeaderFooterView
  • UITextField
  • UITextFormattingViewController
  • UITextView
  • UIToolbar
  • UIVideoEditorController
  • UIView
  • UIViewController
  • UIVisualEffectView
  • UIWebView
  • UIWindow
  • UIWindowScene

See Also

Adaptivity

Reduce the need to manually register for trait changes when you use traits within a method or closure that supports automatic trait tracking.

Responding to changing display modes on Apple TV

Change images and resources dynamically when the screen gamut on your device changes.

class UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

protocol UIMutableTraits

A mutable container of traits.

protocol UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.


https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle

Collection

  • UIKit
  • App and environment
  • Managing your apps life cycle

Managing your apps life cycle

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

Overview

The current state of your app determines what it can and cant do at any time. For example, a foreground app has someones attention, so it has priority over system resources, including the CPU. By contrast, a background app must do as little work as possible, and preferably nothing, because its offscreen. As your app changes from state to state, you must adjust its behavior accordingly.

When your apps state changes, UIKit notifies you by calling methods of the appropriate delegate object:

  • In iOS 13 and later, use UISceneDelegate objects to respond to life-cycle events.

  • In iOS 12 and earlier, use the UIApplicationDelegate object to respond to life-cycle events.

Respond to scene-based life-cycle events

UIKit delivers separate life-cycle events for each scene. A scene represents one instance of your apps UI running on a device. A person can create multiple scenes for each app, and show and hide them separately. Because each scene has its own life cycle, each can be in a different state of execution. For example, one scene might be in the foreground while others are in the background or are suspended.

The following figure shows the state transitions for scenes. When a person or the system requests a new scene for your app, UIKit creates it and puts it in the unattached state. Person-requested scenes move quickly to the foreground, where they appear onscreen. A system-requested scene typically moves to the background so that it can process an event. For example, the system might launch the scene in the background to process a location event. When someone dismisses your apps UI, UIKit moves the associated scene to the background state and eventually to the suspended state. UIKit can disconnect a background or suspended scene at any time to reclaim its resources, returning that scene to the unattached state.

Use scene transitions to perform the following tasks:

  • When UIKit connects a scene to your app, configure your scenes initial UI and load the data your scene needs.

  • When transitioning to the foreground-active state, configure your UI and prepare to interact with a person. See Preparing your UI to run in the foreground.

  • Upon leaving the foreground-active state, save data and quiet your apps behavior. See Preparing your UI to run in the background.

  • Upon entering the background state, finish crucial tasks, free up as much memory as possible, and prepare for your app snapshot. See Preparing your UI to run in the background.

  • At scene disconnection, clean up any shared resources associated with the scene.

  • In addition to scene-related events, you must also respond to the launch of your app using your UIApplicationDelegate object. For information about what to do at app launch, see Responding to the launch of your app.

Respond to app-based life-cycle events

In iOS 12 and earlier, UIKit delivers all life-cycle events to the UIApplicationDelegate object. The app delegate manages all of your apps windows, including those displayed on separate screens. As a result, app state transitions affect your apps entire UI, including content on external displays.

The following figure shows the state transitions involving the app delegate object. After launch, the system puts the app in the inactive or background state, depending on whether the UI is about to appear onscreen. When launching to the foreground, the system transitions the app to the active state automatically. After that, the state fluctuates between active and background until the app terminates.

Use app transitions to perform the following tasks:

  • At launch, initialize your apps data structures and UI. See Responding to the launch of your app.

  • At activation, finish configuring your UI and prepare to interact with a person. See Preparing your UI to run in the foreground.

  • Upon deactivation, save data and quiet your apps behavior. See Preparing your UI to run in the background.

  • At termination, stop all work immediately and release any shared resources. See applicationWillTerminate(_:).

Respond to other significant events

In addition to handling life-cycle events, apps must also be prepared to handle the events listed in the following table. Use your UIApplicationDelegate object to handle most of these events. In some cases, you may also be able to handle them using notifications, allowing you to respond from other parts of your app.

Event Response
Memory warnings Received when your apps memory usage is too high. Reduce the amount of memory your app uses; see Responding to memory warnings.
Protected data becomes available/unavailable Received when someone locks or unlocks their device. See applicationProtectedDataDidBecomeAvailable(_:) and applicationProtectedDataWillBecomeUnavailable(_:).
Handoff tasks Received when an NSUserActivity object needs to be processed. See application(_:didUpdate:).
Time changes Received for several different time changes, such as when the phone carrier sends a time update. See applicationSignificantTimeChange(_:).
Open URLs Received when your app needs to open a resource. See application(_:open:options:).

Topics

Behavioral events

Responding to memory warnings

Free up memory when asked to do so by the system.

See Also

Life cycle

Initialize your apps data structures, prepare your app to run, and respond to any launch-time requests from the system.

class UIApplication

The centralized point of control and coordination for apps running in iOS.

protocol UIApplicationDelegate

A set of methods to manage shared behaviors for your app.

Manage multiple instances of your apps UI simultaneously, and direct resources to the appropriate instance of your UI.


https://developer.apple.com/documentation/uikit/responding-to-the-launch-of-your-app


https://developer.apple.com/documentation/uikit/uiapplicationdelegate


https://developer.apple.com/documentation/uikit/scenes

Collection

  • UIKit
  • App and environment
  • Scenes

API Collection

Scenes

Manage multiple instances of your apps UI simultaneously, and direct resources to the appropriate instance of your UI.

Overview

UIKit manages each instance of your apps UI using a UIWindowScene object. A scene contains the windows and view controllers for presenting one instance of your UI. Each scene also has a corresponding UIWindowSceneDelegate object, which you use to coordinate interactions between UIKit and your app. Scenes run concurrently with each other, sharing the same memory and app process space. As a result, a single app may have multiple scenes and scene delegate objects active at the same time.

Manage the configuration of new scenes from your UIApplicationDelegate object.

Topics

Essentials

Configure your app to appear onscreen.

Prepare your app to be suspended.

Window scenes

Supporting multiple windows on iPad

Support side-by-side instances of your apps interface and create new windows.

protocol UIWindowSceneDelegate

Additional methods that you use to manage app-specific tasks occurring in a scene.

class UIWindowScene

A scene that manages one or more windows for your app.

class UIScene

An object that represents one instance of your apps user interface.

protocol UISceneDelegate

The core methods you use to respond to life-cycle events occurring within a scene.

Configuration

Specifying the scenes your app supports

Tell the system about your apps scenes, including the objects you use to manage each scene and its initial user interface.

UIApplicationSceneManifest

The information about the apps scene-based life-cycle support.

class UISceneConfiguration

Information about the objects and storyboard for UKit to use when creating a particular scene.

class UISceneSession

An object that contains information about one of your apps scenes.

Activation and destruction

class UISceneActivationConditions

The set of conditions that define when UIKit activates the current scene.

class ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

class UIWindowSceneDestructionRequestOptions

An object that contains information to use when removing a window scene from your app.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.

URL management

class UIOpenURLContext

A system-provided object that contains the information you need to open a single URL.

class OpenExternalURLOptions

Options you specify when asking a scene to open a URL.

Errors

enum Code

Error codes for issues with scenes.

struct UISceneError

Errors returned during the creation or management of a scene.

let UISceneErrorDomain: String

The domain for scene-related errors.

See Also

Life cycle

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

Initialize your apps data structures, prepare your app to run, and respond to any launch-time requests from the system.

class UIApplication

The centralized point of control and coordination for apps running in iOS.

protocol UIApplicationDelegate

A set of methods to manage shared behaviors for your app.


https://developer.apple.com/documentation/uikit/uidevice

  • UIKit
  • UIDevice

Class

UIDevice

A representation of the current device.

tvOS

@MainActor class UIDevice

Overview

Use a UIDevice object to get information about the device such as assigned name, device model, and operating-system name and version. You also use the UIDevice instance to detect changes in the devices characteristics, such as physical orientation. You get the current orientation using the orientation property or receive change notifications by registering for the orientationDidChangeNotification notification. Before using either of these techniques to get orientation data, you must enable data delivery using the beginGeneratingDeviceOrientationNotifications() method. When you no longer need to track the device orientation, call the endGeneratingDeviceOrientationNotifications() method to disable the delivery of notifications.

Similarly, you can use the UIDevice instance to obtain information and notifications about changes to the batterys charge state (described by the batteryState property) and charge level (described by the batteryLevel property). The UIDevice instance also provides access to the proximity sensor state (described by the proximityState property). The proximity sensor detects whether the user is holding the device close to their face. Enable battery monitoring or proximity sensing only when you need it.

You can also use the playInputClick() instance method to play keyboard input clicks in custom input and keyboard accessory views.

Topics

Getting the shared device instance

class var current: UIDevice

An object that represents the current device.

Identifying the device and operating system

var name: String

The name of the device.

var systemName: String

The name of the operating system running on the device.

var systemVersion: String

The current version of the operating system.

var model: String

The model of the device.

var localizedModel: String

The model of the device as a localized string.

var userInterfaceIdiom: UIUserInterfaceIdiom

The style of interface to use on the current device.

var identifierForVendor: UUID?

An alphanumeric string that uniquely identifies a device to the apps vendor.

Determining the available features

var isMultitaskingSupported: Bool

A Boolean value that indicates whether the current device supports multitasking.

Tracking the device orientation

var orientation: UIDeviceOrientation

The physical orientation of the device.

enum UIDeviceOrientation

Constants that describe the physical orientation of the device.

var isGeneratingDeviceOrientationNotifications: Bool

A Boolean value that indicates whether the device generates orientation notifications.

func beginGeneratingDeviceOrientationNotifications()

Begins the generation of notifications of device orientation changes.

func endGeneratingDeviceOrientationNotifications()

Ends the generation of notifications of device orientation changes.

Determining the current orientation

var isPortrait: Bool

A Boolean value that indicates whether the device is in a portrait orientation.

var isLandscape: Bool

A Boolean value that indicates whether the device is in a landscape orientation.

var isFlat: Bool

A Boolean value that indicates whether the specified orientation is face up or face down.

var isValidInterfaceOrientation: Bool

A Boolean value that indicates whether the specified orientation is one of the portrait or landscape orientations.

Getting the device battery state

var batteryLevel: Float

The battery charge level for the device.

var isBatteryMonitoringEnabled: Bool

A Boolean value that indicates whether battery monitoring is enabled.

var batteryState: UIDevice.BatteryState

The battery state for the device.

enum BatteryState

Constants that describe the battery power state of the device.

Using the proximity sensor

var isProximityMonitoringEnabled: Bool

A Boolean value that indicates whether proximity monitoring is enabled.

var proximityState: Bool

A Boolean value that indicates whether the proximity sensor is close to the user.

Playing input clicks

func playInputClick()

Plays an input click in an enabled input view.

Getting the current idiom

enum UIUserInterfaceIdiom

Constants that indicate the interface type for the device or an object that has a trait environment, such as a view and view controller.

Returns the interface idiom supported by the current device (recommended for apps that run in versions of iOS earlier than 3.2).

Deprecated

Managing notifications

All UIDevice notifications are posted by the singleton device instance returned by current.

class let batteryLevelDidChangeNotification: NSNotification.Name

A notification that posts when the battery level changes.

class let batteryStateDidChangeNotification: NSNotification.Name

A notification that posts when battery state changes.

class let orientationDidChangeNotification: NSNotification.Name

A notification that posts when the orientation of the device changes.

class let proximityStateDidChangeNotification: NSNotification.Name

A notification that posts when the state of the proximity sensor changes.

Structures

struct BatteryLevelDidChangeMessage Beta

struct BatteryStateDidChangeMessage Beta

struct OrientationDidChangeMessage Beta

struct ProximityStateDidChangeMessage Beta

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Device environment

class UIStatusBarManager

An object that describes the configuration of the status bar.


https://developer.apple.com/documentation/uikit/uistatusbarmanager

  • UIKit
  • UIStatusBarManager

Class

UIStatusBarManager

An object that describes the configuration of the status bar.

@MainActor class UIStatusBarManager

Overview

Use a UIStatusBarManager object to get the current configuration of the status bar for its associated scene. You dont create UIStatusBarManager objects directly. Instead, you retrieve an existing object from the statusBarManager property of a UIWindowScene object.

You dont use this object to modify the configuration of the status bar. Instead, you set the status bar configuration individually for each of your UIViewController objects. For example, to modify the default visibility of the status bar, override the prefersStatusBarHidden property of your view controller.

Topics

Getting the status bar configuration

var isStatusBarHidden: Bool

A Boolean value that indicates whether the status bar is currently hidden.

var statusBarStyle: UIStatusBarStyle

The current appearance of the status bar.

Getting the frame rectangle

var statusBarFrame: CGRect

The frame rectangle of the status bar.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Device environment

class UIDevice

A representation of the current device.


https://developer.apple.com/documentation/uikit/automatic-trait-tracking

Collection

  • UIKit
  • App and environment
  • Automatic trait tracking

API Collection

Automatic trait tracking

Reduce the need to manually register for trait changes when you use traits within a method or closure that supports automatic trait tracking.

Overview

Automatic trait tracking is a UIKit feature that eliminates the need to manually register for trait changes when you use traits in a supported method or closure. This feature reduces the amount of code you need to write and maintain, improves performance, and encourages the best practice of using traits within the scope of the supported APIs.

Some properties arent appropriate to change during layoutSubviews(), for example, properties where setting the value has a side-effect of invalidating the views layout. Update these properties in a views updateProperties() method, or a view controllers updateProperties() method. These methods support automatic trait tracking, and automatic observation tracking on objects that use the Observable() macro. Notify an object of other updates to its properties by calling setNeedsUpdateProperties() on your view, or setNeedsUpdateProperties() on your view controller. Force an object to immediately update its properties by calling updatePropertiesIfNeeded() on your view, or updatePropertiesIfNeeded() on your view controller.

A complete list of APIs that support automatic trait tracking appears below.

Topics

Views

Views support automatic trait tracking when using traits from the trait collection of the view inside any of the following methods.

func updateProperties()

Override point for subclasses to update properties of this view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

Beta

func setNeedsUpdateProperties()

Call to manually request a properties update for the view. Multiple requests may be coalesced into a single update alongside the next layout pass.

func updatePropertiesIfNeeded()

Forces an immediate properties update for this view (and its view controller, if applicable) and any subviews, including any view controllers or views in its subtree.

func layoutSubviews()

Lays out subviews.

func updateConstraints()

Updates constraints for the view.

func draw(CGRect)

Draws the views image within the passed-in rectangle.

struct Properties

View controllers

View controllers support automatic trait tracking for both the trait collection of the view controller and the trait collection of its view inside any of the following methods.

Override point for subclasses to update properties of this view controller or its view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

Call to manually request a properties update for the view controller. Multiple requests may be coalesced into a single update alongside the next layout pass.

Forces an immediate properties update for this view controller and its view, including any view controllers and views in this subtree.

func viewWillLayoutSubviews()

Notifies the view controller that its view is about to lay out its subviews.

func viewDidLayoutSubviews()

Notifies the view controller when its view finishes laying out its subviews.

func updateViewConstraints()

Notifies the view controller when its view needs to update its constraints.

func updateContentUnavailableConfiguration(using: UIContentUnavailableConfigurationState)

Updates the content-unavailable configuration for the provided state.

Presentation controllers

Presentation controllers support automatic trait tracking for both the trait collection of the presentation controller and the trait collection of its container view inside any of the following methods.

func containerViewWillLayoutSubviews()

Notifies the presentation controller that layout is about to begin on the views of the container view.

func containerViewDidLayoutSubviews()

Notifies the presentation controller when layout ends on the views of the container view.

Buttons

func updateConfiguration()

Updates the button configuration in response to a button state change.

var configurationUpdateHandler: UIButton.ConfigurationUpdateHandler?

A closure that executes when the button state changes.

Collection view cells

func updateConfiguration(using: UICellConfigurationState)

Updates the cells configuration using the current state.

var configurationUpdateHandler: UICollectionViewCell.ConfigurationUpdateHandler?

A block for handling updates to the cells configuration using the current state.

Table view cells

var configurationUpdateHandler: UITableViewCell.ConfigurationUpdateHandler?

Table view headers and footers

func updateConfiguration(using: UIViewConfigurationState)

Updates the views configuration using the current state.

var configurationUpdateHandler: UITableViewHeaderFooterView.ConfigurationUpdateHandler?

A block for handling updates to the views configuration using the current state.

Collection view compositional layouts

The compositional layout section provider supports automatic trait tracking when using traits from the trait collection of the layout environment in the section provider.

typealias UICollectionViewCompositionalLayoutSectionProvider

A closure that creates and returns each of the layouts sections.

See Also

Adaptivity

Responding to changing display modes on Apple TV

Change images and resources dynamically when the screen gamut on your device changes.

class UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

protocol UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

protocol UIMutableTraits

A mutable container of traits.

protocol UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.


https://developer.apple.com/documentation/uikit/responding-to-changing-display-modes-on-apple-tv


https://developer.apple.com/documentation/uikit/uitraitcollection

  • UIKit
  • UITraitCollection

Class

UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

tvOS

class UITraitCollection

Mentioned in

Displaying and managing views with a view controller

Building a desktop-class iPad app

Overview

The traitCollection property of the UITraitEnvironment protocol contains traits that describe the state of various elements of the iOS user interface, such as size class, display scale, and layout direction. Together, these traits compose the UIKit trait environment.

The following classes adopt UITraitEnvironment: UIScreen, UIWindow, UIViewController, UIPresentationController, and UIView. To create an adaptive interface, write code to adjust your apps layout according to changes in these traits. You access specific trait values using the UITraitCollection horizontalSizeClass, verticalSizeClass, displayScale, and userInterfaceIdiom properties. The UIUserInterfaceSizeClass enumeration defines the values for the horizontal and vertical size class. The display scale is a floating point number. The UIUserInterfaceIdiom enumeration defines the values for the user interface idiom.

To make your view controllers and views responsive to changes in the iOS interface environment, override the traitCollectionDidChange(_:) method from the trait environment protocol. To customize view controller animations in response to interface environment changes, override the willTransition(to:with:) method of the UIContentContainer protocol.

The following image shows the horizontal (width) and vertical (height) size classes your app can encounter when running full-screen on various devices.

For information about size classes your app encounters in Slide Over and Split View on iPad, read Slide Over and Split View Quick Start in Adopting Multitasking Enhancements on iPad.

You can create standalone trait collections to assist in matching against specific environments. The UITraitCollection class includes four specialized constructors, as well as a constructor that enables you to combine an array of trait collections, init(traitsFrom:).

One important use of standalone trait collections is to enable conditional use of images based on the current iOS interface environment. You can associate a trait collection with a UIImage instance by way of a UIImageAsset instance, as described in the overview section of UIImageAsset. For information on configuring asset catalogs graphically from within the Xcode IDE, see Managing assets with asset catalogs.

You can employ a standalone trait collection to enable a two-column split view in landscape orientation on iPhone. See the setOverrideTraitCollection(_:forChild:) method of the UIViewController class.

You can also use a standalone trait collection to customize view appearance with the appearance(for:) protocol method, as described in UIAppearance.

3D Touch and trait collections

Starting in iOS 9, you can use this class to check whether the device on which your app is running supports 3D Touch. Read the value of the forceTouchCapability property on the trait collection for any object in your app with a trait environment. For information about trait environments, see UITraitEnvironment. For the possible values of the force touch capability property, see the UIForceTouchCapability enumeration.

Because a user can turn off 3D Touch in Settings, check the value of the forceTouchCapability property in your implementation of the traitCollectionDidChange(_:) method, and adjust your code paths according to the propertys value.

Custom traits

You can create a custom trait using UITraitDefinition. You read custom traits from UITraitCollection using subscript syntax. When you define a custom trait, declare a property for the trait in an extension to UITraitCollection so that you can access your custom trait using standard property syntax.

The following example defines a property for a custom trait, and reads the trait value from a trait collection.

// ThemeTrait conforms to UITraitDefinition, with a defaultValue type of Theme. extension UITraitCollection { var theme: Theme { self[ThemeTrait.self] } }

let viewTheme = view.traitCollection.theme

Topics

Creating a trait collection

init()

Creates a trait collection whose traits are set to their default (unspecified) values.

init(userInterfaceIdiom: UIUserInterfaceIdiom)

Creates a trait collection that contains only a specified interface idiom.

init(horizontalSizeClass: UIUserInterfaceSizeClass)

Creates a trait collection that contains only a specified horizontal size class.

init(verticalSizeClass: UIUserInterfaceSizeClass)

Creates a trait collection that contains only a specified vertical size class.

init(userInterfaceStyle: UIUserInterfaceStyle)

Creates a trait collection that contains only the specified user interface style trait.

init(accessibilityContrast: UIAccessibilityContrast)

Creates a trait collection that contains only the specified accessibility contrast trait.

init(userInterfaceLevel: UIUserInterfaceLevel)

Creates a trait collection that contains only the specified user interface level trait.

init(legibilityWeight: UILegibilityWeight)

Creates a trait collection that contains only the specified legibility weight trait.

init(forceTouchCapability: UIForceTouchCapability)

Creates a trait collection that contains only a specified force touch capability trait.

init(displayScale: CGFloat)

Creates a trait collection that contains only a specified display scale.

init(displayGamut: UIDisplayGamut)

Creates a trait collection that contains only the specified display gamut trait.

init(layoutDirection: UITraitEnvironmentLayoutDirection)

Creates a trait collection that contains only the specified layout direction trait.

init(preferredContentSizeCategory: UIContentSizeCategory)

Creates a trait collection that contains only the specified content size category trait.

init(activeAppearance: UIUserInterfaceActiveAppearance)

Creates a trait collection that contains only the specified active appearance trait.

init(toolbarItemPresentationSize: UINSToolbarItemPresentationSize)

Creates a trait collection that contains only the specified toolbar item presentation size trait.

init?(coder: NSCoder)

Creates a trait collection from data in an unarchiver.

init(traitsFrom: [UITraitCollection])

Creates a trait collection that consists of traits merged from a specified array of trait collections.

Deprecated

Modifying traits

typealias TraitMutations

Getting the current traits

class var current: UITraitCollection

The trait collection for the current execution context.

Retrieving size class traits

var horizontalSizeClass: UIUserInterfaceSizeClass

The horizontal size class of the trait collection.

var verticalSizeClass: UIUserInterfaceSizeClass

The vertical size class of the trait collection.

enum UIUserInterfaceSizeClass

Constants that indicate the size class of a view.

var displayScale: CGFloat

The display scale of the trait collection.

var displayGamut: UIDisplayGamut

The gamut of the current display.

enum UIDisplayGamut

Constants that indicate the gamut of the current display.

var userInterfaceStyle: UIUserInterfaceStyle

The style associated with the user interface.

enum UIUserInterfaceStyle

Constants that indicate the interface style for the app.

var userInterfaceIdiom: UIUserInterfaceIdiom

The user interface idiom of the trait collection.

enum UIUserInterfaceIdiom

Constants that indicate the interface type for the device or an object that has a trait environment, such as a view and view controller.

var userInterfaceLevel: UIUserInterfaceLevel

The elevation level of the interface.

enum UIUserInterfaceLevel

Constants that indicate the visual level for content in the window.

var layoutDirection: UITraitEnvironmentLayoutDirection

The layout direction associated with the current environment.

enum UITraitEnvironmentLayoutDirection

Constants that indicate the layout direction associated with the current environment.

var accessibilityContrast: UIAccessibilityContrast

The accessibility contrast associated with the current environment.

enum UIAccessibilityContrast

Constants that indicate the accessibility contrast setting.

var legibilityWeight: UILegibilityWeight

The font weight to apply to text.

enum UILegibilityWeight

Constants that indicate the weight to apply to text in your interface.

var activeAppearance: UIUserInterfaceActiveAppearance

A property that indicates whether the user interface has an active appearance.

enum UIUserInterfaceActiveAppearance

Constants that indicate whether the user interface has an active appearance.

var toolbarItemPresentationSize: UINSToolbarItemPresentationSize

The presentation size of a toolbar item in an AppKit toolbar.

enum UINSToolbarItemPresentationSize

Constants that specify the presentation size of a toolbar item in an AppKit toolbar.

Retrieving the force touch capability traits

var forceTouchCapability: UIForceTouchCapability

The force touch capability value of the trait collection.

enum UIForceTouchCapability

Keys that indicate the availability of 3D Touch on a device.

Retrieving content size category information

var preferredContentSizeCategory: UIContentSizeCategory

The font sizing option preferred by the user.

struct UIContentSizeCategory

Constants that indicate the preferred size of your content.

Retrieving list environment traits

var listEnvironment: UIListEnvironment

enum UIListEnvironment

Constants that indicate the style of the containing list in a collection view or table view.

Retrieving scene capture state

var sceneCaptureState: UISceneCaptureState

enum UISceneCaptureState

Retrieving dynamic range traits

var imageDynamicRange: UIImage.DynamicRange

Retrieving typesetting language traits

var typesettingLanguage: Locale.Language?

Comparing trait collections

Queries whether changing between the specified and current trait collections would affect color values.

Queries whether a trait collection contains all of another trait collections values.

Getting an image configuration object

var imageConfiguration: UIImage.Configuration

An image configuration object compatible with this trait collection.

Performing actions with the current traits

Executes custom code using the traits of the receiving trait collection.

Initializers

init(hdrHeadroomUsageLimit: UIHDRHeadroomUsageLimit) Beta

init(imageDynamicRange: UIImage.DynamicRange)

init(listEnvironment: UIListEnvironment)

init(sceneCaptureState: UISceneCaptureState)

init(tabAccessoryEnvironment: UITabAccessory.Environment)

Constructs a new trait collection with the given tabAccessoryEnvironment.

Beta

convenience init(typesettingLanguage: Locale.Language?)

Instance Properties

var hdrHeadroomUsageLimit: UIHDRHeadroomUsageLimit

If HDR headroom should be used for the current UI configuration. Headroom usage is disabled in certain UI configurations, such as when all an applications windows are in the background.

var splitViewControllerLayoutEnvironment: UISplitViewController.LayoutEnvironment

The split view controller layout environment represents whether an ancestor split view controller is expanded or collapsed.

var tabAccessoryEnvironment: UITabAccessory.Environment

The tab accessory environment represents whether a given trait collection is from a view in a UITabAccessory content view.

Type Properties

static var systemTraitsAffectingColorAppearance: [UITrait]

static var systemTraitsAffectingImageLookup: [UITrait]

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype

See Also

Adaptivity

Reduce the need to manually register for trait changes when you use traits within a method or closure that supports automatic trait tracking.

Responding to changing display modes on Apple TV

Change images and resources dynamically when the screen gamut on your device changes.

protocol UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

protocol UIMutableTraits

A mutable container of traits.

protocol UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.


https://developer.apple.com/documentation/uikit/uitraitchangeobservable-67e94

  • UIKit
  • UITraitChangeObservable

Protocol

UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

Mac CatalystvisionOS

@MainActor protocol UITraitChangeObservable

Mentioned in

Building a desktop-class iPad app

Overview

Types that conform to UITraitChangeObservable can execute your code in response to changes in their trait collection. When you register for trait changes, the system observes the specified traits, and calls your code when any of the observed traits change value.

Keep your trait registrations focused, and avoid doing work not directly relevant to updated traits. Traits may change more than once before the system updates a view, so avoid expensive work in response to trait changes. For example, use the trait change notification to call setNeedsDisplay(), and update your view in draw(_:).

UIKit cleans up registrations at the end of the object lifecycle. Unregister only in the rare situations when you need to dynamically change which traits you observe.

Topics

Observing trait changes

Registers a list of traits to observe, and calls a method on the receiving object when one of the observed traits changes.

Required

Registers a list of traits to observe and a closure to execute when one of the observed traits changes.

Registers a list of traits to observe, and calls a method on the specified target object when one of the observed traits changes.

func unregisterForTraitChanges(any UITraitChangeRegistration)

Tells the system to stop observing previously registered traits.

typealias TraitChangeHandler

A closure the system executes when observed traits change.

protocol UITraitChangeRegistration

Relationships

Conforming Types

  • UIActionSheet
  • UIActivityIndicatorView
  • UIActivityViewController
  • UIAlertController
  • UIAlertView
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICloudSharingController
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewController
  • UICollectionViewListCell
  • UIColorPickerViewController
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIEventAttributionView
  • UIFontPickerViewController
  • UIImagePickerController
  • UIImageView
  • UIInputView
  • UIInputViewController
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UINavigationController
  • UIPageControl
  • UIPageViewController
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIPopoverPresentationController
  • UIPresentationController
  • UIProgressView
  • UIReferenceLibraryViewController
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchContainerViewController
  • UISearchController
  • UISearchTextField
  • UISegmentedControl
  • UISheetPresentationController
  • UISlider
  • UISplitViewController
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarController
  • UITableView
  • UITableViewCell
  • UITableViewController
  • UITableViewHeaderFooterView
  • UITextField
  • UITextFormattingViewController
  • UITextView
  • UIToolbar
  • UIVideoEditorController
  • UIView
  • UIViewController
  • UIVisualEffectView
  • UIWebView
  • UIWindow
  • UIWindowScene

See Also

Adaptivity

Reduce the need to manually register for trait changes when you use traits within a method or closure that supports automatic trait tracking.

Responding to changing display modes on Apple TV

Change images and resources dynamically when the screen gamut on your device changes.

class UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

protocol UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

protocol UIMutableTraits

A mutable container of traits.

protocol UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.


https://developer.apple.com/documentation/uikit/uimutabletraits-13ja5


https://developer.apple.com/documentation/uikit/uiadaptivepresentationcontrollerdelegate

  • UIKit
  • UIAdaptivePresentationControllerDelegate

Protocol

UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIAdaptivePresentationControllerDelegate : NSObjectProtocol

Overview

After implementing an object that conforms to this protocol, assign that object to the delegate property of an appropriate UIPresentationController object. Your delegate can suggest a new presentation style or an entirely new view controller for displaying content. For more information about using the delegate to respond to size class changes, see UIPresentationController.

Topics

Adapting the presentation style

Asks the delegate for the presentation style to use when the specified set of traits are active.

Asks the delegate for the new presentation style to use.

Adapting the view controller

Asks the delegate for the view controller to display when adapting to the specified presentation style.

Responding to adaptive transitions

func presentationController(UIPresentationController, willPresentWithAdaptiveStyle: UIModalPresentationStyle, transitionCoordinator: (any UIViewControllerTransitionCoordinator)?)

Notifies the delegate that an adaptivity-related transition is about to occur.

func presentationControllerDidAttemptToDismiss(UIPresentationController)

Notifies the delegate that a user-initiated attempt to dismiss a view was prevented.

Asks the delegate for permission to dismiss the presentation.

func presentationControllerDidDismiss(UIPresentationController)

Notifies the delegate after a presentation is dismissed.

func presentationControllerWillDismiss(UIPresentationController)

Notifies the delegate before a presentation is dismissed.

Preparing the adaptive presentation controller

func presentationController(UIPresentationController, prepare: UIPresentationController)

Provides an opportunity to configure the adaptive presentation controller after an adaptivity change.

Relationships

Inherits From

  • NSObjectProtocol

Inherited By

  • UIPopoverPresentationControllerDelegate
  • UISheetPresentationControllerDelegate

See Also

Adaptivity

Reduce the need to manually register for trait changes when you use traits within a method or closure that supports automatic trait tracking.

Responding to changing display modes on Apple TV

Change images and resources dynamically when the screen gamut on your device changes.

class UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

protocol UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

protocol UITraitChangeObservable

A type that calls your code in reaction to changes in the trait environment.

protocol UIMutableTraits

A mutable container of traits.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.


https://developer.apple.com/documentation/uikit/uicontentcontainer


https://developer.apple.com/documentation/uikit/uitrait-9423


https://developer.apple.com/documentation/uikit/uitraitdefinition-64c15

  • UIKit
  • UITraitDefinition

Protocol

UITraitDefinition

A type representing a trait in a trait collection.

Mac CatalystvisionOS

protocol UITraitDefinition

Overview

All traits contained in a UITraitCollection conform to this protocol. You can create custom traits by defining your own conforming type.

The example below defines a new trait that holds the value of an integer-based enumeration named Theme:

enum Theme: Int { case standard case monochrome }

struct ThemeTrait: UITraitDefinition { static let defaultValue = Theme.standard }

The protocol defines default implementations for name and identifier properties. Defining defaultValue is the minimum requirement to conform to this protocol. All properties you implement must be constant. UITraitDefinition defines the associated type Value which is the type of defaultValue.

The best candidates for trait values are simple value types, such as Bool, Int, Double, and enumerations with an Int raw value. You can also use lightweight structures as trait values. The system frequently tests trait values for equality, so structures need an efficient implementation of Equatable. Avoid using Swift classes as trait values.

If you use your custom trait to implement custom dynamic colors, implement affectsColorAppearance and return true. Returning true tells the system to update and redraw views automatically when the trait changes. The system responds to changes to your trait similar to changes in system traits contained in systemTraitsAffectingColorAppearance. Changes to traits that affect color appearance are more expensive, so opt in to this behavior only when necessary, and change such traits infrequently.

For each custom trait, define extensions on UIMutableTraits and UITraitCollection to enable reading and modifying your custom traits with standard property syntax. The example below shows extensions for the example Theme trait.

extension UITraitCollection { var theme: Theme { self[ThemeTrait.self] } }

extension UIMutableTraits { var theme: Theme { get { self[ThemeTrait.self] } set { self[ThemeTrait.self] = newValue } } }

A trait type serves as a unique key, identifying a trait within a trait collection. Methods such as subscript(_:) and UIPresentationController/registerForTraitChanges(_:handler:) take a trait type to identify the trait in a collection.

Traits defined in Swift arent automatically bridged to Objective-C. If you need to access your custom trait from both Swift and Objective-C code, define the trait in both languages. For details, see the Objective-C documentation for UITraitDefinition.

Topics

Associated Types

associatedtype Value

Required

Type Properties

static var affectsColorAppearance: Bool

Required Default implementation provided.

static var defaultValue: Self.Value

static var identifier: String

static var name: String

Relationships

Conforming Types

  • UITraitAccessibilityContrast
  • UITraitActiveAppearance
  • UITraitDisplayGamut
  • UITraitDisplayScale
  • UITraitForceTouchCapability
  • UITraitHDRHeadroomUsageLimit
  • UITraitHorizontalSizeClass
  • UITraitImageDynamicRange
  • UITraitLayoutDirection
  • UITraitLegibilityWeight
  • UITraitListEnvironment
  • UITraitPreferredContentSizeCategory
  • UITraitSceneCaptureState
  • UITraitSplitViewControllerLayoutEnvironment
  • UITraitTabAccessoryEnvironment
  • UITraitToolbarItemPresentationSize
  • UITraitTypesettingLanguage
  • UITraitUserInterfaceIdiom
  • UITraitUserInterfaceLevel
  • UITraitUserInterfaceStyle
  • UITraitVerticalSizeClass

See Also

Custom traits

protocol UIMutableTraits

A mutable container of traits.

typealias UITrait


https://developer.apple.com/documentation/uikit/building-a-desktop-class-ipad-app

  • UIKit
  • App and environment
  • Building a desktop-class iPad app

Article

Building a desktop-class iPad app

Optimize your iPad apps user experience by adopting desktop-class enhancements for multitasking with Stage Manager, document interactions, text editing, search, and more.

Overview

People can use an iPad with a Magic Keyboard and an external display to achieve desktop-class productivity. Build your app to take advantage of features that help people increase their efficiency, customize their workflows, and complete tasks more quickly. After you create a desktop-class iPad app, bring your app directly over to the Mac with minimal additional effort using Mac Catalyst. Bring your app to Apple Vision Pro using the details in Making your existing app compatible with visionOS.

Enhance the multitasking experience with Stage Manager

A great iPad app supports productivity by enabling quick, complex workflows across multiple apps with Stage Manager, which people can use to quickly switch to other open apps and windows on the side of the screen. People can also dynamically resize app windows to show many open windows side by side on the iPad or on an external display.

Follow these steps to support a great multitasking experience with Stage Manager:

  • Build your UI with scenes. A scene contains the windows and view controllers for presenting one instance of your UI. Adopt scenes as part of your apps core infrastructure, and use them to adjust your apps behavior at important times, such as when your scene transitions to the foreground, changes orientation, or moves to an external display. Use scenes, instead of UIScreen, to determine which hardware display shows your UI. For more information, see Scenes.

  • Support a variety of workflows with multiple app windows. Consider letting people view and interact with more than one app window at a time to enable workflows like viewing multiple documents simultaneously or quickly dragging and dropping content from one part of your app to another. Use scenes to support multiple app windows. For more information, see Supporting multiple windows on iPad.

  • Respond to window resizing. Because people who use Stage Manager can dynamically resize their iPad app windows, your apps UI can transition through a broad range of sizes. Design your UI for flexible layout configurations, and make sure your app adapts to different window sizes quickly and smoothly. Discover your apps environment with UITraitCollection, and adapt to it by using Auto Layout or by registering for trait change notifications in your view controllers or views with UITraitChangeObservable in Swift or UITraitChangeRegistration in Objective-C.

  • Consider the best use of additional space that an external display provides. Support interactive resizable windows through scenes with a windowApplication role, or present noninteractive content with a windowExternalDisplayNonInteractive scene. For more information, see Presenting content on a connected display.

  • Test your UI on different devices, in different environments. Consider the various configurations and sizes your UI can appear in, and make sure to test your app under those conditions. For example, test under the following conditions: full screen, Split View, Slide Over, Picture in Picture (PIP), and dynamic resizing in all dimensions while using Stage Manager with an external display.

Support powerful document-editing workflows

Navigation-based apps support a specialized editor style that brings important document-editing features to the forefront and supports user customization. Navigation-based apps can also use a title menu to surface document management operations, sharing capabilities, and custom actions.

Follow these steps to support document-editing enhancements on iPad:

  • Switch to editor-style navigation for document-editing apps. Navigation-based interfaces can use the UINavigationItem.ItemStyle.editor style to bring the content density and flexibility of the Mac toolbar to iPad. This style moves the title to the leading side to open up more space for important controls, so you can provide fast access to common actions with a single tap. Specify important controls using centerItemGroups, and enable people to customize the layout of those controls using customizationIdentifier.

  • Support document interactions through a title menu. Show a menu when a person taps the documents title using titleMenuProvider. Include standard actions like move, duplicate, and export, or implement custom actions. Add a menu header that contains document information and sharing capabilities, like share and drag and drop, using documentProperties.

  • Support fast document renaming. Implement renameDelegate to show Rename in the title menu, and to surface an inline system UI for people to rename their document after tapping on the documents title.

Simplify the text-editing process

When people use an iPad with an external keyboard, they expect full support for keyboard input, including familiar keyboard shortcuts and interactions. A smooth text-editing experience takes advantage of standard system capabilities, and tailors itself according to touch or keyboard input. To enable a productive text-editing experience, leverage system enhancements to text-editing menus, as well as Find and Replace.

Follow these steps to provide a great text-editing experience on iPad:

  • Create text-editing menus for the current input method. To create an edit menu that adjusts its presentation style according to touch or indirect input for an optimal user experience, see UIEditMenuInteraction.

  • Integrate the system Find and Replace experience into your text views. For standard system text input views like UITextView or WKWebView, set isFindInteractionEnabled to true to allow people to find and replace text using the system Find panel. For custom text view implementations, see UIFindInteraction.

Support inline searches with suggestions

iPadOS includes an inline search UI that opens up more space for the surrounding content. Improve content discovery by taking advantage of search capabilities in your iPad app and providing search suggestions to help people navigate your content even quicker.

Follow these steps to provide a great search experience on iPad:

  • Choose the search experience thats best for your UI. Take advantage of the inline search placement in a navigation bar to open up more space for your content. To control the search placement explicitly, set preferredSearchBarPlacement to choose between the inline or traditional stacked search experience.

  • Provide helpful search suggestions. Specify searchSuggestions on your navigation items search controller to help people quickly narrow down their search. Update the search suggestions as people type. If you use a search field independently of a search controller, provide search suggestions using searchSuggestions.

Provide an intuitive multiple-selection experience

People who use iPad with a Magic Keyboard expect to use the trackpad to perform different types of selections and actions in your app. Leverage multiple selection to provide intuitive interactions and elevate the most relevant contextual actions.

Follow these steps to provide a great experience for multiple selection on iPad:

  • Enable lightweight multiple selection with indirect input. Allow people using indirect input methods, like a keyboard or trackpad, to select multiple items in a collection view without placing the collection view into editing mode. Opt into this behavior by setting allowsMultipleSelection, allowsFocus, and selectionFollowsFocus to true.

  • Distinguish between selection and primary action. Primary actions allow you to distinguish between a distinct user action and a change in selection. A primary action occurs when a person selects a single cell without extending an existing selection. Implement collectionView(_:performPrimaryActionForItemAt:) to perform actions like navigation or showing another split-view column.

  • Specialize context menu options according to the number of selected items. Customize your context menus to surface different capabilities depending on whether the selection contains zero, one, or many items. Implement collectionView(_:contextMenuConfigurationForItemsAt:point:) to support context menus for multiple selections in a collection view. If you use UIContextMenuInteraction directly, implement secondaryItemIdentifiers and the UIContextMenuInteractionDelegate preview animation methods.

Bring your iPad app to the Mac with Mac Catalyst

If your iPad app already supports a desktop-class experience, you can bring your app over to the Mac using Mac Catalyst. When you build your iPadOS app with Mac Catalyst, the system bridges certain interactions and UI elements to their counterparts in macOS.

Follow these steps to expedite the process of bringing your iPad app to the Mac with Mac Catalyst:

  • Bring your navigation bar customization to the Mac toolbar. By default, NSToolbar automatically hosts your navigation bars content when its behavioral style is UIBehavioralStyle.mac. Use behavioralStyle to check your navigation bars behavioral style, and currentNSToolbarSection to check where the toolbar hosts the navigation bar. You can opt out of NSToolbar hosting your navigation bar by setting preferredBehavioralStyle to UIBehavioralStyle.pad.

  • Host custom views directly in the Mac toolbar. If you build your own NSToolbar instead of using UINavigationBar, host your custom UIKit views in the toolbar by creating a NSUIViewToolbarItem. In your custom view, use the toolbarItemPresentationSize trait to render your content at an appropriate size depending on the toolbars display mode.

For more information about building an app with Mac Catalyst, see Bring an iPad App to the Mac with Mac Catalyst.

See Also

iPad

Elevating your iPad app with a tab bar and sidebar

Provide a compact, ergonomic tab bar for quick access to key parts of your app, and a sidebar for in-depth navigation.

Supporting desktop-class features in your iPad app

Enhance your iPad app by adding desktop-class features and document support.

Implement multitasking APIs to seamlessly integrate your app with iPadOS.


https://developer.apple.com/documentation/uikit/elevating-your-ipad-app-with-a-tab-bar-and-sidebar

  • UIKit
  • App and environment
  • Elevating your iPad app with a tab bar and sidebar

Article

Elevating your iPad app with a tab bar and sidebar

Provide a compact, ergonomic tab bar for quick access to key parts of your app, and a sidebar for in-depth navigation.

Overview

In iPadOS 18 and later, the position of the tab bar moves from the bottom of the screen to float over your content at the top. This compact appearance gives you more space for your apps content. Additionally, because it shares space with the navigation bar, it places your tabs closer to your apps other controls.

iPadOS apps automatically receive the new tab bar appearance when you compile them for iPadOS 18 and later.

Create a tab bar

iPadOS 18 also introduces new API for creating tab bars. Create a UITabBarController and assign an array of UITab objects to its tabs property. To create a tab, call init(title:image:identifier:viewControllerProvider:). In the closure, return the view controller your app presents when someone selects the tab. If you use SF Symbols for your tabs image, be sure to select the outline variant. The system automatically selects the correct variant (outline or filled) based on the context. Additionally, you can change a tabs properties, such as title or image, at runtime, and the system automatically updates its appearance.

// Create the tab bar controller. let tabBarController = UITabBarController()

// Assign an array of tabs. tabBarController.tabs = [

UITab(title: "First",
image: UIImage(systemName: "1.circle"),
identifier: "First Tab") { _ in
// Return the view controller that the tab displays.
MyFirstViewController()
},

UITab(title: "Second",
image: UIImage(systemName: "2.circle"),
identifier: "Second Tab") { _ in
// Return the view controller that the tab displays.
MySecondViewController()
},

UITab(title: "Third",
image: UIImage(systemName: "3.circle"),
identifier: "Third Tab") { _ in
// Return the view controller that the tab displays.
MyThirdViewController()
}
]

To add a search tab, create a UISearchTab instance and add it to the tabs array.

// Create a search tab. UISearchTab { _ in // Return the view controller that the tab displays. UINavigationController( rootViewController: MySearchViewController() ) }

The new iPad tab bar supports an unlimited number of items. If there isnt enough room to display all the tabs, the system collapses any tabs that cant fit onscreen, and lets people scroll through them. However, consider limiting your tabs to just those that fit in the tab bar. This ensures that people can access key parts of your app with one tap.

Integrate the tab bar and sidebar

Although both tab bars and sidebars play a similar navigation role in iPadOS apps, they have different strengths. A tab bar is always available and represents the key parts of your app. A sidebar provides a richer collection of possible destinations; however, people typically need to navigate

Use the new UITab and UITabGroup classes to create a hierarchy of tabs. If the tabs array contains at least one tab group, the system automatically displays the tabs as both a tab bar and a sidebar. Otherwise, it only displays the array as a tab bar. You can also explicitly define how the system displays your tabs by setting the UITabBarController objects mode property.

// Enable the sidebar. tabBarController.mode = .tabSidebar

// Get the sidebar. let sidebar = tabBarController.sidebar

// Show the sidebar. sidebar.isHidden = false

By default, the system presents the sidebar in landscape orientation and hides it in portrait orientation; however, people can toggle between the tab bar and sidebar in either orientation. You can also programmatically show and hide the sidebar by setting its isHidden property.

Build a hierarchy of items for the sidebar

You can use UITabGroup to define a section of items in the sidebar. Provide an array of tabs for the sections content and a view controller to display when someone selects the section from the tab bar.

let sectionOne = UITabGroup( title: "Section 1", image: UIImage(systemName: "1.square.fill"), identifier: "Section one", children: [
UITab(
title: "Subitem A",
image: UIImage(systemName: "a.circle"),
identifier: "Section 1, item A"
) { _ in
MyFirstSubitemTabViewController()
},

UITab(
title: "Subitem B",
image: UIImage(systemName: "b.circle"),
identifier: "Section 1, item b"
) { _ in
MySecondSubitemTabViewController()
},

UITab(
title: "Subitem C",
image: UIImage(systemName: "c.circle"),
identifier: "Section 1, item C"
) { _ in
MyThirdSubitemTabViewController()
},
]) { _ in // Return a view controller that the system displays when someone selects the section in the tab bar. MySectionViewController() }

The tab bar displays a tab group as a single tab item, and the sidebar displays it as a section that contains subitems. The sidebar displays top-level tab items first, followed by the sections.

You can nest a UITabGroup inside another UITabGroup to create a deeper hierarchy in the sidebar; however, consider limiting your app to two, or at most three, layers. Also, you can dynamically change a tab groups content at runtime by modifying its children property.

Add actions to the sidebar

You can add actions to the sidebar by setting a tab groups sidebarActions property. These actions function like buttons that you place inside the tab group.

// Create the action. let refreshAction = UIAction(title: "Refresh", image: UIImage(systemName: "arrow.clockwise")) { _ in myAction() }

// Assign the action. sectionOne.sidebarActions = [refreshAction]

To support swipe actions or context menus, assign a delegate to your sidebar that adopts the UITabBarController.Sidebar.Delegate protocol, and implement the following optional methods:

  • tabBarController(_:sidebar:leadingSwipeActionsConfigurationFor:)

  • tabBarController(_:sidebar:trailingSwipeActionsConfigurationFor:)

  • tabBarController(_:sidebar:contextMenuConfigurationFor:)

To support drag-and-drop operations, assign a delegate to your tab bar that adopts the UITabBarControllerDelegate protocol, and implement the tabBarController(_:tab:operationForAcceptingItemsFrom:) and tabBarController(_:tab:acceptItemsFrom:) methods.

Enable customization

With the new tab bar and sidebar, people can customize the content in both. The system provides a button to put the bars into edit mode. While editing, people can:

  • Drag items from the sidebar to the tab bar to add them to the tab bar.

  • Drag items from the tab bar to remove them from the tab bar.

  • Drag items to reorder them in the tab bar.

  • Drag items to reorder them inside their tab group.

  • Uncheck items in the sidebar to hide them. This also removes them from the tab bar.

The system automatically persists any customizations that someone makes to the bars. You can implement the tabBarController(_:displayOrderDidChangeFor:) and tabBarController(_:visibilityDidChangeFor:) delegate methods to receive notifications about the changes.

By default, only the top-level tabs appear in the tab bar. People can add or remove any tab in the sidebar, but cant hide or reorder the items in it.

To control which items appear in the tab bar, and how people can customize them, set the UITab objects preferredPlacement property. Conceptually, you can think of the tab bar as having three different regions:

  • Fixed tabs appear on the leading edge of the tab bar.

  • Default, optional, and movable tabs appear after the fixed tabs.

  • Pinned tabs are always visible on the trailing edge, and only show the tabs image.

When possible, make tabs customizable so that people can choose which ones to place in the tab bar. If you have any tabs that are central to your app, consider making them fixed tabs, so that people cant remove or move them. Use pinned tabs for prominent items, like search. Also, because pinned tabs only display the tab icon, be sure to select an image that people recognize and can easily understand.

To create an item that appears in the sidebar, but that people cant add to the tab bar, set the preferredPlacement property to UITab.Placement.sidebarOnly. To create an item that people can add to or remove from the sidebar, set its allowsHiding property to true. If someone removes an item from the sidebar, the system also removes it from the tab bar.

// Create the tab. var customizeableItem = UITab( title: "Optional", image: UIImage(systemName: "questionmark.app"), identifier: "Optional Item" ) { _ in MyOptionalViewController() }

// Let people add and remove this item in the sidebar. customizeableItem.allowsHiding = true

// Set the item as hidden in the sidebar by default. customizeableItem.isHiddenByDefault = true

To let people reorganize items within a tab group, set the groups allowsReordering property to true.

sectionOne.allowsReordering = true

You can also programmatically set the order of items in a tab group using its displayOrderIdentifiers property. By default, the system sets the tab groups order based on its children property.

Use the tab bar and sidebar on other platforms

The new UITab API is also available in iOS 18, Mac Catalyst 18, tvOS 18, and visionOS 2, and later. Consider using this API to create tab bars on all UIKit-based projects.

The new tab bar and sidebar only appear on iPad. On iPhone and Apple TV, the system displays the platforms regular tab bar. For Mac Catalyst, it displays a tab bar if the tab bar controllers mode property is UITabBarController.Mode.tabBar, and a sidebar if its UITabBarController.Mode.tabSidebar.

In visionOS, the system displays the platforms regular tabs, but a UITabGroup can display a sidebar when it displays the groups view controller.

See Also

iPad

Building a desktop-class iPad app

Optimize your iPad apps user experience by adopting desktop-class enhancements for multitasking with Stage Manager, document interactions, text editing, search, and more.

Supporting desktop-class features in your iPad app

Enhance your iPad app by adding desktop-class features and document support.

Implement multitasking APIs to seamlessly integrate your app with iPadOS.


https://developer.apple.com/documentation/uikit/supporting-desktop-class-features-in-your-ipad-app

  • UIKit
  • App and environment
  • Supporting desktop-class features in your iPad app

Sample Code

Supporting desktop-class features in your iPad app

Enhance your iPad app by adding desktop-class features and document support.

Download

Xcode 15.0+

Overview

This sample project shows how to build an app that takes full advantage of the iPads desktop-class features like hardware keyboard and trackpad support, Stage Manager, and rich document-editing capabilities. The app is a markup document editor that allows creating, editing, previewing, and saving documents, including features like a title menu with custom actions, document renaming, Find and Replace, and more.

Choose the appropriate navigation style

Because the app allows focused viewing and editing of individual documents, it uses the UINavigationItem.ItemStyle.editor navigation style. This navigation style moves the navigation items title to the leading edge and opens up space in the center of the bar for common document actions. To choose the navigation style, the editor view controller assigns the navigation items style property.

Add center items for quick access to common actions

Center item groups are groups of controls that appear in the navigation bar to provide quick access to the apps most important capabilities. A person can customize the navigation bars center items by moving, removing, or adding certain groups. To enable user customization, the app assigns a string to the navigation items customizationIdentifier property.

// Set a customizationIdentifier and add center item groups. navigationItem.customizationIdentifier = "editorViewCustomization"

The editor view controller configures center items and assigns them to the navigation items centerItemGroups property in configureCenterItemGroups(). The editor view controller creates one fixed group that people cant move or remove from the navigation bar for the Sync Scrolling item using creatingFixedGroup().

UIBarButtonItem(primaryAction: UIAction(title: "Sync Scrolling", image: syncScrollingImage) { [unowned self] action in syncScrolling.toggle() if let barButtonItem = action.sender as? UIBarButtonItem { barButtonItem.image = syncScrollingImage } }).creatingFixedGroup(),

Other center item groups are optional, which means people can customize their placement in the navigation bar. Optional groups that have isInDefaultCustomization set to false dont appear in the navigation bar by default. They appear in the customization popover that a person can access by choosing the customization option in the overflow menu.

UIBarButtonItem(primaryAction: UIAction(title: "Strikethrough", image: UIImage(systemName: "strikethrough")) { [unowned self] _ in insertTag(.strikethrough) }).creatingOptionalGroup(customizationIdentifier: "strikethrough", isInDefaultCustomization: false),

Add a title menu with system and custom actions

A title menu appears when a person taps the navigation items title. This menu can surface actions that are relevant to the current document. To configure a title menu, the editor view controller assigns a closure to the navigation items titleMenuProvider property.

navigationItem.titleMenuProvider = { suggested in let custom = [
UIMenu(title: "Export…", image: UIImage(systemName: "arrow.up.forward.square"), children: [
UIAction(title: "HTML", image: UIImage(systemName: "safari")) { [unowned self] _ in
previewView.exportAsWebArchive(named: document.localizedName, presenter: self)
},
UIAction(title: "PDF", image: UIImage(systemName: "doc.richtext")) { [unowned self] _ in
previewView.exportAsPDF(named: document.localizedName, presenter: self)
}
])
] return UIMenu(children: suggested + custom) }

The closure returns a menu that combines the suggested system actions and custom actions. The first set of actions in the menu are the suggested actions that the system passes in to the closure, including Move and Duplicate. The next set of actions are the custom actions that the app defines: exporting the document to HTML and PDF.

Configure a document header

A document header displays helpful information about the current document, such as its title, file type, and size. It also provides a place from which to share or drag and drop the document. To display a document header at the top of the title menu, the editor view controller assigns a UIDocumentProperties object to the navigation items documentProperties property.

Enable the system Find and Replace experience

The editor view supports editing the content of the document. Because the editor view is a subclass of UITextView, enabling the system Find and Replace experience takes one line of code.

// Enable Find and Replace in editor text view and register as its // delegate. editorTextView.isFindInteractionEnabled = true

Setting the isFindInteractionEnabled property enables using standard keyboard shortcuts to find text in a document and quickly replace it using the system-provided Find panel.

Enhance multiple-item selection

The outline view is a collection view that serves as a table of contents for the document, allowing for quick navigation or taking actions on the top-level tags in the document. This view supports an enhanced multiple-selection experience when a person interacts with the app using a keyboard and pointer. The outline view enables lightweight multiple selection of the tags without placing the collection view into editing mode by setting allowsMultipleSelection, allowsFocus, and selectionFollowsFocus to true.

// Enable multiple selection. collectionView.allowsMultipleSelection = true

// Enable keyboard focus. collectionView.allowsFocus = true

// Allow keyboard focus to drive selection. collectionView.selectionFollowsFocus = true

A person can use the keyboard and pointer to select tags, and perform a secondary click to open a context menu with relevant actions. The outline view presents a specialized context menu according to the number of tags in the selection by implementing collectionView(_:contextMenuConfigurationForItemsAt:point:) to return different configurations when the selection contains one or many tags.

// Action titles for a multiple-item menu. hideTitle = "Hide Selected" deleteTitle = "Delete Selected" } else { // Action titles for a single-item menu. hideTitle = "Hide" deleteTitle = "Delete" }

Perform a primary action when tapping a single item

In addition to performing a secondary click on a tag in the outline view, a person can tap a single tag to scroll to its corresponding location in the editor view. To distinguish the explicit user action of tapping one tag to navigate to that location in the document from selecting multiple tags, the outline view implements collectionView(_:performPrimaryActionForItemAt:). The system calls this method when a person taps a single tag without extending a multiple selection of tags.

func collectionView(_ collectionView: UICollectionView, performPrimaryActionForItemAt indexPath: IndexPath) { // Get the element at the indexPath. if let element = dataSource.itemIdentifier(for: indexPath) { delegate?.outline(self, didChoose: element) }

// Wait a short amount of time before deselecting the cell for visual clarity. DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { collectionView.deselectItem(at: indexPath, animated: true) } }

See Also

iPad

Building a desktop-class iPad app

Optimize your iPad apps user experience by adopting desktop-class enhancements for multitasking with Stage Manager, document interactions, text editing, search, and more.

Elevating your iPad app with a tab bar and sidebar

Provide a compact, ergonomic tab bar for quick access to key parts of your app, and a sidebar for in-depth navigation.

Implement multitasking APIs to seamlessly integrate your app with iPadOS.


https://developer.apple.com/documentation/uikit/multitasking-on-ipad

Collection

  • UIKit
  • App and environment
  • Multitasking on iPad

API Collection

Multitasking on iPad

Implement multitasking APIs to seamlessly integrate your app with iPadOS.

Overview

While your apps scene runs in the foreground on iPad, other apps are likely to be running alongside it. Being aware of the environment your app may be running in and adopting the multitasking APIs are an essential part of integrating your apps with iPadOS.

The first step to creating a great multitasking experience for your users is to ensure your apps scenes can adapt to different window sizes. Start by reading the Adaptivity and Layout section of the Human Interface Guidelines. Also, consider that your app may not be running full screen, but in a smaller window through Slide Over or Split View. Discover your apps environment with UITraitCollection and adapt to it by using Auto Layout, or by overriding traitCollectionDidChange(_:) in your view controllers or views.

You can choose to allow multiple scenes in your apps UI to run concurrently by setting the UIApplicationSupportsMultipleScenes property list key. Implement Scenes and read Managing your apps life cycle for an overview of how UISceneDelegate interacts with the system multitasking events. For information on adopting the scene-based life cycle, see TN3187: Migrating to the UIKit scene-based life cycle.

Design your apps scenes to display correctly in any interface orientation. In situations where you want to lock the apps interface to its current orientation, call setNeedsUpdateOfPrefersInterfaceOrientationLocked(), then return true as the value of prefersInterfaceOrientationLocked, or override childViewControllerForInterfaceOrientationLock to delegate the decision to a child view controller. Implement windowScene(_:didUpdateEffectiveGeometry:) to observe orientation changes, as the system might change the interface orientation even if you signal a preference to lock it. The preference to lock the interface orientation lasts until your app stops presenting the scene, or you call setNeedsUpdateOfPrefersInterfaceOrientationLocked() again and return false as the value of prefersInterfaceOrientationLocked.

Topics

Adaptivity

class UITraitCollection

A collection of data that represents the environment for an individual element in your apps user interface.

protocol UITraitEnvironment

A set of methods that makes the iOS interface environment available to your app.

protocol UIAdaptivePresentationControllerDelegate

A set of methods that, in conjunction with a presentation controller, determine how to respond to trait changes in your app.

protocol UIContentContainer

A set of methods for adapting the contents of your view controllers to size and trait changes.

Scene Management

Manage multiple instances of your apps UI simultaneously, and direct resources to the appropriate instance of your UI.

Supporting multiple windows on iPad

Support side-by-side instances of your apps interface and create new windows.

See Also

iPad

Building a desktop-class iPad app

Optimize your iPad apps user experience by adopting desktop-class enhancements for multitasking with Stage Manager, document interactions, text editing, search, and more.

Elevating your iPad app with a tab bar and sidebar

Provide a compact, ergonomic tab bar for quick access to key parts of your app, and a sidebar for in-depth navigation.

Supporting desktop-class features in your iPad app

Enhance your iPad app by adding desktop-class features and document support.


https://developer.apple.com/documentation/uikit/uiguidedaccessrestrictiondelegate

  • UIKit
  • UIGuidedAccessRestrictionDelegate

Protocol

UIGuidedAccessRestrictionDelegate

A set of methods you use to add custom restrictions for the Guided Access feature in iOS.

tvOS

@MainActor protocol UIGuidedAccessRestrictionDelegate : NSObjectProtocol

Overview

Custom restrictions are represented by string identifiers provided by the developer in the guidedAccessRestrictionIdentifiers method. Each identifier represents an operation in the app that the developer wishes to allow users to restrict using Guided Access. The default for all operations is allow. Users can deny operations using the normal Guided Access user interface. See for a description of how to enable and configure Guided Access on iOS.

Apps describe their custom restrictions by implementing the textForGuidedAccessRestriction(withIdentifier:) and detailTextForGuidedAccessRestriction(withIdentifier:) methods to return appropriate localized, human-readable strings.

For example, a photo editing app might allow users to disable deleting photos. The app would return an identifier representing this restriction in its guidedAccessRestrictionIdentifiers method. It would also implement textForGuidedAccessRestriction(withIdentifier:) to provide a human-readable description of the restriction. Finally, the app would implement guidedAccessRestriction(withIdentifier:didChange:) to notice when a user indicates that they want to enable the restriction. When the app sees the state change to “deny”, it would configure itself to prevent the deletion of photos by any means. Similarly, when the app sees the state change to “allow”, it would configure itself to allow photo deletion.

Apps can use the guidedAccessRestrictionState(forIdentifier:) function to check the state of a restriction at any time.

Topics

Identifying custom Guided Access restrictions

var guidedAccessRestrictionIdentifiers: [String]?

An array of strings identifying custom restrictions.

Required

Provides a succinct description of the restriction for the specified identifier.

Provides more detailed information about the restriction for the specified identifier.

Implementing restrictions

func guidedAccessRestriction(withIdentifier: String, didChange: UIAccessibility.GuidedAccessRestrictionState)

Tells the delegate that the restriction associated with the identifier has changed state.

enum GuidedAccessRestrictionState

Constants that describe the state of a restriction, either allow or deny.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Guided Access

Returns the restriction state for the specified guided access restriction.


https://developer.apple.com/documentation/uikit/uiaccessibility/guidedaccessrestrictionstate(foridentifier:)


https://developer.apple.com/documentation/uikit/updating-your-app-from-32-bit-to-64-bit-architecture

Collection

  • UIKit
  • App and environment
  • Updating your app from 32-bit to 64-bit architecture

Updating your app from 32-bit to 64-bit architecture

Ensure that your app behaves as expected by adapting it to support later versions of the operating system.

Overview

In iOS 11 and later, all apps use the 64-bit architecture. If your app targets an earlier version of iOS, you must update it to run on later versions.

Update your app to the latest SDK

Begin by updating your existing app to iOS 11 or later. By updating your app first, you can remove deprecated code paths, address any compiler warnings, and search your code for specific 64-bit issues.

  1. Install the latest version of Xcode and open your project. Xcode prompts you to modernize the project. Modernizing adds new warnings and errors that are important when compiling your app for 64-bit architecture.

  2. Update your project settings to support the latest version of iOS. You cant build a 64-bit project if it targets an iOS version earlier than iOS 5.1.

  3. Change the Architectures build setting in your project to Standard Architectures.

  4. Update your app to support the 64-bit runtime environment. The new compiler warnings and errors help guide you through this process.

  5. Test your app on actual 64-bit hardware. Dont rely on the Simulator app. Although it can be helpful during development, some changes, such as the function-calling conventions, are visible only when your app is running on a device.

  6. Tune your apps memory performance by using Instruments.

Audit your code

Its critical that you review your code for proper pointer usage. Assumptions in pointer sizes can lead to erratic behavior and even crashes. Focus on the following areas:

  • Updating data structures. Eliminate assumptions about type size and alignment in structures, and use explicit data types.

  • Auditing pointer usage. Adhere to proper casting behaviors and review your methods for allocating memory.

  • Managing functions and function pointers . Use function prototypes for safety, and review the calling of functions that have variable-length argument lists.

With pointer usage addressed, your app should be stable and you can focus on performance and optimize accordingly:

  • Optimizing memory performance. Establish performance tests that measure your use of memory in the context of 64-bit runtime.

  • Verifying mathematical calculations. Verify signed values in math operations to ensure accurate results, and review your use of bit mask operations.

Topics

Memory and pointer access

Updating data structures

Review your apps data design and update it to conform with 64-bit architecture.

Auditing pointer usage

Ensure that the pointers in your code are safe for the 64-bit runtime.

Managing functions and function pointers

Ensure that your code correctly handles functions, function pointers, and Objective-C messages.

Performance and accuracy

Optimizing memory performance

Measure the impact of the 64-bit runtime on your apps memory usage.

Verifying mathematical calculations

Ensure the accuracy of your math operations in 64-bit architecture.

See Also

Architecture

Creates the application object and the application delegate and sets up the event cycle.


https://developer.apple.com/documentation/uikit/uiapplicationmain(::::)-1yub7

-1yub7#app-main)

  • UIKit
  • UIApplicationMain(_:_:_:_:)

Function

UIApplicationMain(_:_:_:_:)

Creates the application object and the application delegate and sets up the event cycle.

iOSiPadOSMac CatalysttvOSvisionOS

func UIApplicationMain( _ argc: Int32,

_ principalClassName: String?, _ delegateClassName: String?

Parameters

argc

The count of arguments in argv; this usually is the corresponding parameter to main.

argv

A variable list of arguments; this usually is the corresponding parameter to main.

principalClassName

The name of the UIApplication class or subclass. If you specify nil, UIApplication is assumed.

delegateClassName

The name of the class from which the application delegate is instantiated. If principalClassName designates a subclass of UIApplication, you may designate the subclass as the delegate; the subclass instance receives the application-delegate messages. Specify nil if you load the delegate object from your applications main nib file.

Return Value

Even though an integer return type is specified, this function never returns. When users exits an iOS app by pressing the Home button, the application moves to the background.

Mentioned in

About the app launch sequence

Discussion

This function instantiates the application object from the principal class and instantiates the delegate (if any) from the given class and sets the delegate for the application. It also sets up the main event loop, including the applications run loop, and begins processing events. If the applications Info.plist file specifies a main nib file to be loaded, by including the NSMainNibFile key and a valid nib file name for the value, this function loads that nib file.

Despite the declared return type, this function never returns.

See Also

Architecture

Ensure that your app behaves as expected by adapting it to support later versions of the operating system.


https://developer.apple.com/documentation/uikit/uiviewcontroller)


https://developer.apple.com/documentation/uikit/uitraitenvironment)


https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle)


https://developer.apple.com/documentation/uikit/responding-to-the-launch-of-your-app)


https://developer.apple.com/documentation/uikit/uiapplicationdelegate)


https://developer.apple.com/documentation/uikit/scenes)


https://developer.apple.com/documentation/uikit/uidevice)


https://developer.apple.com/documentation/uikit/uistatusbarmanager)


https://developer.apple.com/documentation/uikit/automatic-trait-tracking)


https://developer.apple.com/documentation/uikit/responding-to-changing-display-modes-on-apple-tv)


https://developer.apple.com/documentation/uikit/uitraitcollection)


https://developer.apple.com/documentation/uikit/uitraitchangeobservable-67e94)


https://developer.apple.com/documentation/uikit/uimutabletraits-13ja5)


https://developer.apple.com/documentation/uikit/uiadaptivepresentationcontrollerdelegate)


https://developer.apple.com/documentation/uikit/uicontentcontainer)


https://developer.apple.com/documentation/uikit/uitrait-9423)


https://developer.apple.com/documentation/uikit/uitraitdefinition-64c15)


https://developer.apple.com/documentation/uikit/building-a-desktop-class-ipad-app)


https://developer.apple.com/documentation/uikit/elevating-your-ipad-app-with-a-tab-bar-and-sidebar)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/supporting-desktop-class-features-in-your-ipad-app)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/multitasking-on-ipad)


https://developer.apple.com/documentation/uikit/uiguidedaccessrestrictiondelegate)


https://developer.apple.com/documentation/uikit/uiaccessibility/guidedaccessrestrictionstate(foridentifier:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/updating-your-app-from-32-bit-to-64-bit-architecture)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplicationmain(::::)-1yub7)


https://developer.apple.com/documentation/uikit/requesting-access-to-protected-resources

  • UIKit
  • Protecting the Users Privacy
  • Requesting access to protected resources

Article

Requesting access to protected resources

Provide a purpose string that explains to a person why you need access to protected resources on their device.

Overview

Modern devices collect and store a wealth of sensitive information about people who use them. Many apps rely on this kind of data, and the device hardware that generates it, to do useful work. For example, a navigation app needs a persons GPS coordinates to locate the person on a map. But not all apps need access to all data. The same navigation app doesnt need access to a persons health history, camera interface, or Bluetooth peripherals.

Ensure your app accesses only what it needs to do its job. To support this principle, Apples operating systems restrict access to protected data and resources by default. Apps can request access on a case-by-case basis, providing an explanation for why they need access. The person who uses the app decides whether to grant or deny the request.

Provide a purpose string

The first time your app attempts to access a protected resource, the system prompts the person using the app for permission. In the following example, an iOS app called FoodDeliveryApp, which provides a food delivery service, generates a prompt requesting access to the persons location:

If the person grants permission, the system remembers the persons choice and doesnt prompt again. If the person denies permission, the access attempt that initiates the prompt, and any further attempts, fail in a resource-specific way. For the particular case of access to location data, the person can choose to allow access for one session only by tapping Allow Once.

The system automatically generates the prompts title, which includes the name of your app. You supply a message called a purpose string or a usage description — in this case, “Your location allows you to view restaurants in delivery range of your address.” — to indicate the reason that your app needs the access. Accurately and concisely explaining to the person why your app needs access to sensitive data, typically in one complete sentence, lets the person make an informed decision and improves the chances that they grant access.

You provide a purpose string by setting a string value for a resource-specific key that you add to your apps Information Property List file. The message in the image above, for example, is a string associated with the NSLocationWhenInUseUsageDescription key. Modify your Info.plist file using the property list editor in Xcode.

Always provide a valid purpose string in the Info.plist file if your app uses a protected resource. If you dont, attempts to access the resource fail, and might even cause your app to crash.

If your app supports multiple locales, in addition to providing a purpose string in the Info.plist file, localize it, and place the localized string in the InfoPlist.strings files for each locale you want to support.

Adhere to the requirements for purpose strings

To give people useful, concise information about why youre requesting access to protected resources, make sure each purpose string you provide is valid by checking the following:

  • The purpose string isnt blank and doesnt consist solely of whitespace characters.

  • The purpose string is shorter than 4,000 bytes. Typical purpose strings are one complete sentence, but you can provide additional information to help a person make the right decision about sharing personal information.

  • The purpose string has the proper type that the corresponding key requires, typically a string.

  • The purpose string provides a description thats accurate, meaningful, and specific about why the app needs to access the protected resource.

Adhere to these requirements for every purpose string in the Info.plist file and locale-specific InfoPlist.strings files.

App Review checks for the use of protected resources, and rejects apps that contain code accessing those resources without a purpose string. For example, an app accessing location might receive the following information from App Review about the requirement that an NSLocationWhenInUseUsageDescription key be present:

ITMS-90683: Missing purpose string in Info.plist. Your apps code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the "{app-bundle-path}" bundle should contain a NSLocationWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If youre using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:

To resolve this issue, provide a purpose string that explains why the app needs access to this sensitive information, or remove the code thats accessing the resource.

Check for authorization

Many system frameworks that provide access to protected resources have dedicated APIs for checking and requesting authorization to use those resources. This model allows you to adjust your apps behavior depending on the current access it has. For example, if a person denies your app permission to do something, you can remove related elements from your user interface.

Because a person can change authorization at any time using Settings, always check the authorization status of a feature before accessing it. In cases without a dedicated API, prepare your app to gracefully handle access failures.

Reset authorization access

When your app attempts to access a protected resource after its first attempt, the system remembers the persons permission choice and doesnt prompt again. To prompt the person again, you need to reset access to these resources on your device or system.

$ tccutil reset AppleEvents

This command resets authorization access for all apps using the protected resource. You can similarly specify Camera, Calendar, Reminders, or other services to reset them individually.

See Also

Supporting Privacy

Encrypting Your Apps Files

Protect the users data in iOS by encrypting it on disk.


https://developer.apple.com/documentation/uikit/encrypting-your-app-s-files

  • UIKit
  • Protecting the Users Privacy
  • Encrypting Your Apps Files

Article

Encrypting Your Apps Files

Protect the users data in iOS by encrypting it on disk.

Overview

Data protection is an iOS feature that you use to secure your apps files and prevent unauthorized access to them. Data protection is enabled automatically when the user sets an active passcode for the device. You read and write your files normally, but the system encrypts and decrypts your content behind the scenes. The encryption and decryption processes are automatic and hardware accelerated.

You specify the level of data protection that you want to apply to each of your files. There are four levels available, each of which determines when you may access the file. If you do not specify a protection level when creating a file, iOS applies the default protection level automatically.

  • No protection. The file is always accessible.

  • Complete until first user authentication. (Default) The file is inaccessible until the first time the user unlocks the device. After the first unlocking of the device, the file remains accessible until the device shuts down or reboots.

  • Complete unless open. You can open existing files only when the device is unlocked. If you have a file already open, you may continue to access that file even after the user locks the device. You can also create new files and access them while the device is locked or unlocked.

  • Complete. The file is accessible only when the device is unlocked.

To create and encrypt a new file in one step, construct a data object with the files contents and call the write(to:options:) method. When calling the method, specify the data protection option that you want applied to the file. The following code shows an example of how to write out the contents of a Data instance to a file and encrypt it using the complete protection level.

do { try data.write(to: fileURL, options: .completeFileProtection) } catch { // Handle errors. }

To change the data protection level of an existing file, use the setResourceValue(_:forKey:) method of NSURL. When calling this method, assign the new data protection option to the fileProtectionKey resource key. The following code shows an example that adds this key to an existing file.

do { try (fileURL as NSURL).setResourceValue( URLFileProtection.complete, forKey: .fileProtectionKey) } catch { // Handle errors. }

Manage Your Access to Encrypted Files

Depending on a files protection level, attempts to read or write its contents could fail when the user subsequently locks the device. To ensure that your app is able to access files, do the following:

  • Choose the right data protection level for your needs.

  • Use the app delegates applicationProtectedDataWillBecomeUnavailable(_:) and applicationProtectedDataDidBecomeAvailable(_:) methods to close and reopen files with the completeFileProtection level.

Assign the complete protection level to files that your app accesses only when it is in the foreground. If your app supports background capabilities, such as handling location updates, assign a different protection level for files that you might access while in the background. For example, a fitness app might use the complete unless open protection level on a file that it uses to log location events in the background.

Files containing personal information about the user, or files created directly by the user, always warrant the strongest level of protection. Assign the complete protection level to user data files and manage access to those files using the app delegate methods. The app delegate methods give you time to close the files before they become inaccessible to your app.

See Also

Supporting Privacy

Requesting access to protected resources

Provide a purpose string that explains to a person why you need access to protected resources on their device.


https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor

  • UIKit
  • UIDevice
  • identifierForVendor

Instance Property

identifierForVendor

An alphanumeric string that uniquely identifies a device to the apps vendor.

tvOS

@MainActor var identifierForVendor: UUID? { get }

Discussion

The value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor.

Normally, the vendor is determined by data provided by the App Store. If the app wasnt installed from the app store (such as enterprise apps and apps still in development), then a vendor identifier is calculated based on the apps bundle ID. The bundle ID is assumed to be in reverse-DNS format.

  • In iOS 6, the first two components of the bundle ID are used to generate the vendor ID. If the bundle ID only has a single component, then the entire bundle ID is used.

  • In IOS 7, all components of the bundle except for the last component are used to generate the vendor ID. If the bundle ID only has a single component, then the entire bundle ID is used.

The following table shows a collection of bundle IDs and which portions of the bundle ID the system uses to calculate the vendor ID.

Bundle ID iOS 6.x iOS 7.x
Com.example.app1 Com.example.app1 Com.example.app1
Com.example.app2 Com.example.app2 Com.example.app2
Com.example.app.app1 Com.example.app.app1 Com.example.app.app1
Com.example.app.app2 Com.example.app.app2 Com.example.app.app2
Example Example Example

For example, com.example.app1 and com.example.app2 would appear to have the same vendor ID.

If the value is nil, wait and get the value again later. This happens, for example, after the device has been restarted but before the user has unlocked the device.

The value in this property remains the same while the app (or another app from the same vendor) is installed on the iOS device. The value changes when the user deletes all of that vendors apps from the device and subsequently reinstalls one or more of them. The value can also change when installing test builds using Xcode or when installing an app on a device using ad-hoc distribution. Therefore, if your app stores the value of this property anywhere, you should gracefully handle situations where the identifier changes.

See Also

Identifying the device and operating system

var name: String

The name of the device.

var systemName: String

The name of the operating system running on the device.

var systemVersion: String

The current version of the operating system.

var model: String

The model of the device.

var localizedModel: String

The model of the device as a localized string.

var userInterfaceIdiom: UIUserInterfaceIdiom

The style of interface to use on the current device.


https://developer.apple.com/documentation/uikit/requesting-access-to-protected-resources).


https://developer.apple.com/documentation/uikit/encrypting-your-app-s-files).


https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor)


https://developer.apple.com/documentation/uikit/requesting-access-to-protected-resources)


https://developer.apple.com/documentation/uikit/encrypting-your-app-s-files)


https://developer.apple.com/documentation/uikit/uicontrol

  • UIKit
  • UIControl

Class

UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

tvOS

@MainActor class UIControl

Mentioned in

Displaying and managing views with a view controller

Overview

Controls implement elements such as buttons and sliders, which your app can use to facilitate navigation, gather user input, or manipulate content. Controls use the target-action mechanism to report user interactions to your app.

You dont create instances of this class directly. The UIControl class is a subclassing point that you extend to implement custom controls. You can also subclass existing control classes to extend or modify their behaviors. For example, you might override the methods of this class to track touch events yourself or to determine when the state of the control changes.

A controls state determines its appearance and its ability to support user interactions. Controls can be in one of several states, which the UIControl.State type defines. You can change the state of a control programmatically according to your apps needs. For example, you might disable a control to prevent the user from interacting with it. User interactions can also change the state of a control.

Respond to user interaction

The target-action mechanism simplifies the code that you write to use controls in your app. Instead of writing code to track touch events, you write action methods to respond to control-specific events. For example, you might write an action method that responds to changes in the value of a slider. The control handles all the work of tracking incoming touch events and determining when to call your methods.

When adding an action method to a control, you specify both the action method and an object that defines that method to the addTarget(_:action:for:) method. (You can also configure the target and action of a control in Interface Builder.) The target object can be any object, but its typically the view controllers root view that contains the control. If you specify nil for the target object, the control searches the responder chain for an object that defines the specified action method.

The signature of an action method takes one of three forms. The sender parameter corresponds to the control that calls the action method, and the event parameter corresponds to the UIEvent object that triggered the control-related event.

@IBAction func doSomething() @IBAction func doSomething(sender: UIButton) @IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)

  • (IBAction)doSomething;
  • (IBAction)doSomething:(id)sender;
  • (IBAction)doSomething:(id)sender forEvent:(UIEvent*)event;

The system calls action methods when the user interacts with the control in specific ways. The UIControl.Event type defines the types of user interactions that a control can report and those interactions mostly correlate to specific touch events within the control. When configuring a control, you must specify which events trigger the calling of your method. For a button control, you might use the touchDown or touchUpInside event to trigger calls to your action method. For a slider, you might care only about changes to the sliders value, so you might choose to attach your action method to valueChanged events.

When a control-specific event occurs, the control calls any associated action methods immediately. The current UIApplication object dispatches action methods and finds an appropriate object to handle the message, following the responder chain, if necessary. For more information about responders and the responder chain, see Event Handling Guide for UIKit Apps.

Configure control attributes in Interface Builder

The following table lists the attributes for instances of the UIControl class.

Attribute Description
Alignment The horizontal and vertical alignment of a controls content. For controls that contain text or images, such as buttons and text fields, use these attributes to configure the position of that content within the controls bounds. These alignment options apply to the content of a control and not to the control itself. For information about how to align controls with respect to other controls and views, see Auto Layout Guide.
Content The initial state of the control. Use the checkboxes to configure whether the control is in an enabled, selected, or highlighted state initially.

Support localization

Because UIControl is an abstract class, you dont internationalize it specifically. However, you do internationalize the content of subclasses like UIButton. For information about internationalizing a specific control, see the reference for that control.

Make controls accessible

Controls are accessible by default. To be useful, an accessible user interface element must provide accurate and helpful information about its screen position, name, behavior, value, and type. This is the information VoiceOver speaks to users. Users who are blind or have low vision can rely on VoiceOver to help them use their devices.

Controls support the following accessibility attributes:

  • Label. A short, localized word or phrase that succinctly describes the control or view, but doesnt identify the elements type. Examples are Add and Play.

  • Traits. A combination of one or more individual traits, each of which describes a single aspect of an elements state, behavior, or usage. For example, you might use a combination of the Keyboard Key and the Selected traits to describe an element that behaves like a keyboard key and thats in a selected state.

  • Hint. A brief, localized phrase that describes the results of an action on an element. Examples are Adds a title and Opens the shopping list.

  • Frame. The frame of the element in screen coordinates, which the CGRect structure specifies for an elements screen location and size.

  • Value. The current value of an element when the label doesnt represent the value. For example, the label for a slider might be Speed, but its current value might be 50%.

The UIControl class provides default content for the value and frame attributes. Many controls automatically enable additional specific traits as well. You can configure other accessibility attributes programmatically or with the Identity inspector in Interface Builder.

For more information about accessibility attributes, see Accessibility Programming Guide for iOS.

Subclassing notes

Subclassing UIControl gives you access to the built-in target-action mechanism and simplified event-handling support. You can subclass existing controls and modify their behavior in one of two ways:

  • Override the sendAction(_:to:for:) method of an existing subclass to observe or modify the dispatching of action methods to the controls associated targets. You might use this method to modify the dispatch behavior for the specified object, selector, or event.

  • Override the beginTracking(_:with:), continueTracking(_:with:), endTracking(_:with:), and cancelTracking(with:) methods to track touch events occurring in the control. You can use the tracking information to perform additional actions. Always use these methods to track touch events instead of the methods that the UIResponder class defines.

If you subclass UIControl directly, your subclass is responsible for setting up and managing your controls visual appearance. Use the methods for tracking events to update your controls state and to send an action when the controls value changes.

Topics

Creating a control

convenience init(frame: CGRect, primaryAction: UIAction?)

Creates a control with the specified frame and primary action.

init(frame: CGRect)

Creates a control with the specified frame.

init?(coder: NSCoder)

Creates a control from data in an unarchiver.

Managing state

var state: UIControl.State

The state of the control, specified as a bit mask value.

struct State

Constants describing the state of a control.

var isEnabled: Bool

A Boolean value indicating whether the control is in the enabled state.

var isSelected: Bool

A Boolean value indicating whether the control is in the selected state.

var isHighlighted: Bool

A Boolean value indicating whether the control draws a highlight.

Specifying content alignment

var contentVerticalAlignment: UIControl.ContentVerticalAlignment

The vertical alignment of content within the controls bounds.

enum ContentVerticalAlignment

Constants for specifying the vertical alignment of content (text and images) in a control.

var contentHorizontalAlignment: UIControl.ContentHorizontalAlignment

The horizontal alignment of content within the controls bounds.

var effectiveContentHorizontalAlignment: UIControl.ContentHorizontalAlignment

The horizontal alignment currently in effect for the control.

enum ContentHorizontalAlignment

The horizontal alignment of content (text and images) within a control.

Managing the controls targets and actions

func addTarget(Any?, action: Selector, for: UIControl.Event)

Associates a target object and action method with the control.

func removeTarget(Any?, action: Selector?, for: UIControl.Event)

Stops the delivery of events to the specified target object.

Returns all target objects associated with the control.

func addAction(UIAction, for: UIControl.Event)

func removeAction(UIAction, for: UIControl.Event)

func removeAction(identifiedBy: UIAction.Identifier, for: UIControl.Event)

Returns the actions performed on a target object when the specified event occurs.

var allControlEvents: UIControl.Event

Returns the events for which the control has associated actions.

Triggering actions

func performPrimaryAction()

Calls the method associated with the controls primary action.

func sendAction(UIAction)

func sendAction(Selector, to: Any?, for: UIEvent?)

Calls the specified action method.

func sendActions(for: UIControl.Event)

Calls the action methods associated with the specified events.

Tracking touches and redrawing controls

Notifies the control when a touch event enters the controls bounds.

Notifies the control when a touch event for the control updates.

func endTracking(UITouch?, with: UIEvent?)

Notifies the control when a touch event associated with the control ends.

func cancelTracking(with: UIEvent?)

Notifies the control to cancel tracking related to the specified event.

var isTracking: Bool

A Boolean value that indicates whether the control is currently tracking touch events.

var isTouchInside: Bool

A Boolean value that indicates whether a tracked touch event is currently inside the controls bounds.

Managing context menus

Adding context menus in your app

Provide quick access to useful actions by adding context menus to your iOS app.

var contextMenuInteraction: UIContextMenuInteraction?

A context menu interaction for the control.

var isContextMenuInteractionEnabled: Bool

A Boolean value that determines whether the control enables its context menu interaction.

var showsMenuAsPrimaryAction: Bool

A Boolean value that determines whether the context menu interaction is the controls primary action.

func contextMenuInteraction(UIContextMenuInteraction, willDisplayMenuFor: UIContextMenuConfiguration, animator: (any UIContextMenuInteractionAnimating)?)

func contextMenuInteraction(UIContextMenuInteraction, willEndFor: UIContextMenuConfiguration, animator: (any UIContextMenuInteractionAnimating)?)

Showing tooltips

Show tooltips in your iPhone and iPad apps running on a Mac with Apple silicon, or your app built with Mac Catalyst.

var toolTip: String?

The default text to display in the controls tooltip.

var toolTipInteraction: UIToolTipInteraction?

The tooltip interaction associated with the control.

Constants

struct Event

Constants describing the types of events possible for controls.

Instance Properties

var isSymbolAnimationEnabled: Bool

A Boolean value that indicates whether symbol effects animate.

Relationships

Inherits From

  • UIView

Inherited By

  • UIButton
  • UIColorWell
  • UIDatePicker
  • UIPageControl
  • UIPasteControl
  • UIRefreshControl
  • UISegmentedControl
  • UISlider
  • UIStepper
  • UISwitch
  • UITextField

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Controls

Responding to control-based events using target-action

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

class UISlider

A control for selecting a single value from a continuous range of values.

class UIStepper

A control for incrementing or decrementing a value.

class UISwitch

A control that offers a binary choice, such as on/off.


https://developer.apple.com/documentation/uikit/collection-views

Collection

  • UIKit
  • Views and controls
  • Collection views

API Collection

Collection views

Display nested views using a configurable and highly customizable layout.

Overview

A collection view manages an ordered set of content, such as the grid of photos in the Photos app, and presents it visually.

Collection views are a collaboration between many different objects, including:

  • Cells. A cell provides the visual representation for each piece of your content.

  • Layouts. A layout defines the visual arrangement of the content in the collection view.

  • Your data source object. This object adopts the UICollectionViewDataSource protocol and provides the data for the collection view.

  • Your delegate object. This object adopts the UICollectionViewDelegate protocol and manages user interactions with the collection views contents, like selection and highlighting.

  • Collection view controller. You typically use a UICollectionViewController object to manage a collection view. You can use other view controllers too, but a collection view controller is required for some collection-related features to work.

Topics

View

class UICollectionView

An object that manages an ordered collection of data items and presents them using customizable layouts.

class UICollectionViewController

A view controller that specializes in managing a collection view.

Data

Updating collection views using diffable data sources

Streamline the display and update of data in a collection view using a diffable data source that contains identifiers.

Implementing modern collection views

Bring compositional layouts to your app and simplify updating your user interface with diffable data sources.

Building high-performance lists and collection views

Improve the performance of lists and collections in your app with prefetching and image preparation.

class UICollectionViewDiffableDataSource

The object you use to manage data and provide cells for a collection view.

protocol UICollectionViewDataSource

The methods adopted by the object you use to manage data and provide cells for a collection view.

protocol UICollectionViewDataSourcePrefetching

A protocol that provides advance warning of the data requirements for a collection view, allowing the triggering of asynchronous data load operations.

struct NSDiffableDataSourceSnapshot

A representation of the state of the data in a view at a specific point in time.

struct NSDiffableDataSourceSectionSnapshot

A representation of the state of the data in a layout section at a specific point in time.

class UIRefreshControl

A standard control that can initiate the refreshing of a scroll views contents.

Cells

class UICollectionViewCell

A single data item when that item is within the collection views visible bounds.

class UICollectionViewListCell

A collection view cell that provides list features and default styling.

class UICollectionReusableView

A view that defines the behavior for all cells and supplementary views presented by a collection view.

Layouts

Arrange your collection view content in a highly configurable layout.

Selection management

Changing the appearance of selected and highlighted cells

Provide visual feed

Accelerate user selection of multiple items using the multiselect gesture on table and collection views.

Drag and drop

Supporting Drag and Drop in Collection Views

Initiate drags and handle drops from a collection view.

protocol UICollectionViewDragDelegate

The interface for initiating drags from a collection view.

protocol UICollectionViewDropDelegate

The interface for handling drops in a collection view.

protocol UICollectionViewDropCoordinator

An interface for coordinating your custom drop-related actions with the collection view.

class UICollectionViewDropPlaceholder

A placeholder for an item dropped on a collection view.

class UICollectionViewDropProposal

Your proposed solution for handling a drop in a collection view.

protocol UICollectionViewDropItem

The data associated with an item being dropped into the collection view.

protocol UICollectionViewDropPlaceholderContext

An object that contains information about a placeholder in the collection view.

protocol UIDataSourceTranslating

An advanced interface for managing a data source object.

class UICollectionViewPlaceholder

A placeholder for an item dragged or dropped on a collection view.

See Also

Container views

Autosizing Views for Localization in iOS

Add auto layout constraints to your app to achieve localizable views.

Display data in a single column of customizable rows.

class UIStackView

A streamlined interface for laying out a collection of views in either a column or a row.

class UIScrollView

A view that allows the scrolling and zooming of its contained views.


https://developer.apple.com/documentation/uikit/table-views

Collection

  • UIKit
  • Views and controls
  • Table views

API Collection

Table views

Display data in a single column of customizable rows.

Overview

A table view displays a single column of vertically scrolling content, divided into rows and sections. Each row of a table displays a single piece of information related to your app. Sections let you group related rows together. For example, the Contacts app uses a table to display the names of the users contacts.

Table views are a collaboration between many different objects, including:

  • Cells. A cell provides the visual representation for your content. You can use the default cells provided by UIKit or define custom cells to suit the needs of your app.

  • Table view controller. You typically use a UITableViewController object to manage a table view. You can use other view controllers too, but a table view controller is required for some table-related features to work.

  • Your data source object. This object adopts the UITableViewDataSource protocol and provides the data for the table.

  • Your delegate object. This object adopts the UITableViewDelegate protocol and manages user interactions with the tables contents.

Topics

Essentials

class UITableView

A view that presents data using rows in a single column.

Data

Filling a table with data

Create and configure cells for your table dynamically using a data source object, or provide them statically from your storyboard.

Asynchronously loading images into table and collection views

Store and fetch images asynchronously to make your app more responsive.

protocol UITableViewDataSource

The methods that an object adopts to manage data and provide cells for a table view.

protocol UITableViewDataSourcePrefetching

A protocol that provides advance warning of the data requirements for a table view, allowing you to start potentially long-running data operations early.

class UITableViewDiffableDataSource

The object you use to manage data and provide cells for a table view.

struct NSDiffableDataSourceSnapshot

A representation of the state of the data in a view at a specific point in time.

class UILocalizedIndexedCollation

An object that organizes, sorts, and localizes the data for a table view that has a section index.

protocol UIDataSourceTranslating

An advanced interface for managing a data source object.

class UIRefreshControl

A standard control that can initiate the refreshing of a scroll views contents.

Table management

Estimating the height of a tables scrolling area

Provide height estimates for your table views headers, footers, and rows to ensure that scrolling accurately reflects the size of your content.

class UITableViewController

A view controller that specializes in managing a table view.

protocol UITableViewDelegate

Methods for managing selections, configuring section headers and footers, deleting and reordering cells, and performing other actions in a table view.

class UITableViewFocusUpdateContext

A context object that provides information relevant to a specific focus update from one view to another.

Cells, headers, and footers

Configuring the cells for your table

Specify the appearance and content of your tables rows by defining one or more prototype cells in your storyboard.

Creating self-sizing table view cells

Create table view cells that support Dynamic Type and use system spacing constraints to adjust the spacing surrounding text labels.

Adding headers and footers to table sections

Differentiate groups of rows visually by adding header and footer views to your table views sections.

class UITableViewCell

The visual representation of a single row in a table view.

class UITableViewHeaderFooterView

A reusable view that you place at the top or bottom of a table section to display additional information for that section.

Row actions

class UISwipeActionsConfiguration

The set of actions to perform when swiping on rows of a table.

class UIContextualAction

An action to display when the user swipes a table row.

class UITableViewRowAction

A single action to present when the user swipes horizontally in a table row.

Deprecated

Selection management

Handling row selection in a table view

Detect when a user taps a table view cell so your app can take the next indicated action.

Selecting multiple items with a two-finger pan gesture

Accelerate user selection of multiple items using the multiselect gesture on table and collection views.

Drag and drop

Supporting drag and drop in table views

Initiate drags and handle drops from a table view.

Adopting drag and drop in a table view

Demonstrates how to enable and implement drag and drop for a table view.

protocol UITableViewDragDelegate

The interface for initiating drags from a table view.

protocol UITableViewDropDelegate

The interface for handling drops in a table view.

protocol UITableViewDropCoordinator

An interface for coordinating your custom drop-related actions with the table view.

protocol UITableViewDropItem

The data associated with an item being dropped into the table view.

class UITableViewDropProposal

Your proposed solution for handling a drop in a table view.

Placeholder cells

protocol UITableViewDropPlaceholderContext

An object for tracking a placeholder cell that you added to your table during a drop operation.

class UITableViewDropPlaceholder

A placeholder cell that supports customizing the drop preview parameters.

class UITableViewPlaceholder

An object that contains information about a placeholder cell being inserted into a table.

See Also

Container views

Autosizing Views for Localization in iOS

Add auto layout constraints to your app to achieve localizable views.

Display nested views using a configurable and highly customizable layout.

class UIStackView

A streamlined interface for laying out a collection of views in either a column or a row.

class UIScrollView

A view that allows the scrolling and zooming of its contained views.


https://developer.apple.com/documentation/uikit/uistackview

  • UIKit
  • UIStackView

Class

UIStackView

A streamlined interface for laying out a collection of views in either a column or a row.

@MainActor class UIStackView

Overview

Stack views let you leverage the power of Auto Layout, creating user interfaces that can dynamically adapt to the devices orientation, screen size, and any changes in the available space. The stack view manages the layout of all the views in its arrangedSubviews property. These views are arranged along the stack views axis, based on their order in the arrangedSubviews array. The exact layout varies depending on the stack views axis, distribution, alignment, spacing, and other properties.

To use a stack view, open the Storyboard you wish to edit. Drag either a Horizontal Stack View or a Vertical Stack View out from the Object library, and position the stack view where desired. Next, drag out the stacks content, dropping the view or control into the stack. You can continue to add views and controls to your stack, as needed. Interface Builder resizes the stack based on its content. You can also adjust the appearance of the stacks content by modifying the Stack Views properties in the Attributes inspector.

Stack view and Auto Layout

The stack view uses Auto Layout to position and size its arranged views. The stack view aligns the first and last arranged view with its edges along the stacks axis. In a horizontal stack, this means the first arranged views leading edge is pinned to the stacks leading edge, and the last arranged views trailing edge is pinned to the stacks trailing edge. In vertical stacks, the top and bottom edges are pinned to the stacks top and bottom edges, respectively. If you set the stack views isLayoutMarginsRelativeArrangement property to true, the stack view pins its content to the relevant margin instead of its edge.

For all distributions except the UIStackView.Distribution.fillEqually distribution, the stack view uses each arranged views intrinsicContentSize property when calculating its size along the stacks axis. UIStackView.Distribution.fillEqually resizes all the arranged views so theyre the same size, filling the stack view along its axis. If possible, the stack view stretches all the arranged views to match the view with the longest intrinsic size along the stacks axis.

For all alignments except the UIStackView.Alignment.fill alignment, the stack view uses each arranged views intrinsicContentSize property when calculating its size perpendicular to the stacks axis. UIStackView.Alignment.fill resizes all the arranged views so that they fill the stack view perpendicularly to its axis. If possible, the stack view stretches all the arranged views to match the view with the largest intrinsic size perpendicular to the stacks axis.

Position and size the stack view

Although a stack view allows you to lay out its contents without using Auto Layout directly, you still need to use Auto Layout to position the stack view itself. In general, this means pinning at least two adjacent edges of the stack view to define its position. Without additional constraints, the system calculates the size of the stack view based on its contents.

  • Along the stack views axis, its fitting size is equal to the sum of the sizes of all the arranged views plus the space between views.

  • Perpendicular to the stack views axis, its fitting size is equal to the size of the largest arranged view.

  • If the stack views isLayoutMarginsRelativeArrangement property is set to true, the stack views fitting size is increased to include space for the margins.

You can provide additional constraints to specify the stack views height, width, or both. In these cases, the stack view adjusts the layout and size of its arranged views to fill the specified area. The exact layout varies based on the stack views properties. See the UIStackView.Distribution and UIStackView.Alignment enumerations for a complete description on how the stack view handles having either extra space or insufficient space for its content.

You can also position a stack view based on its first or last baseline, instead of using the top, bottom, or center Y position. Like the stack views fitting size, these baselines are calculated based on the stack views content.

  • A horizontal stack view returns its tallest view for both the forFirstBaselineLayout and forLastBaselineLayout methods. If the tallest view is also a stack view, it returns the result of calling forFirstBaselineLayout or forLastBaselineLayout on the nested stack view.

  • A vertical stack view returns its first arranged view for forFirstBaselineLayout and its last arranged view for forLastBaselineLayout. If either of these views are also stack views, then it returns the result of calling forFirstBaselineLayout or forLastBaselineLayout on the nested stack view.

Define common stack view layouts

Common approaches for laying out content using stack views:

Define the position only. You can define the stack views position by pinning two of its adjacent edges to its superview. In this case, the stack views size grows freely in both dimensions, based on its arranged views. This approach is particularly useful when you want the stack views content to appear at its intrinsic content size, and you want to arrange other user-interface elements relative to the stack view.

The following image shows a stack view with its leading and top edges pinned to its superview. The labels are first baseline aligned, with an 8-point space between them, left-aligning the stack views content in its superview.

Define the stacks size along its axis. In this case, pin both edges of the stack along its axis to its superview, defining the stack views size in that dimension. You also need to pin one of the other edges to define the stack views position. The stack view sizes and positions its content along its axis to fill the defined space; however, the unpinned edge moves freely, based on the size of the largest arranged view.

The following image shows a stack view with the leading, top, and trailing edges pinned to its superview. Using the fill distribution causes the content to resize to fill the views width, and because the text field has a lower content-hugging priority than the label, its stretched as necessary.

Define the stacks size perpendicular to its axis. This approach is similar to the previous example, but you pin the two edges perpendicular to the stack views axis and only one edge along the axis. This lets the stack view grow and shrink along its axis as you add and remove arranged views. Unless you use a UIStackView.Distribution.fillEqually distribution, the arranged views are sized according to their intrinsic content size. Perpendicular to the axis, the views are laid out in the defined space based on the stack views alignment.

The following image shows a vertical stack containing four labels and a button. The stack uses 8-point spacing and the center alignment. The stack views height grows and shrinks as items are added to or removed from the stack.

Define the size and position of the stack view. In this case, you pin all four edges of the stack view, causing the stack view to lay out its content within the provided space.

The following image shows a vertical stack view with all four edges pinned to its superview. By using the center alignment and fill distribution, the stack view ensures that its content is centered horizontally and vertically fills the screen. However, getting the desired layout with this approach requires a couple of additional steps. By default, the stack view vertically stretches the label and not the image view. To resize the image view, lower its content-hugging priority below the labels content-hugging priority. Additionally, to maintain the image views aspect ratio as it resizes, set its Mode to Aspect Fit. Adding an equal width constraint between the image view and the stack view helps ensure the image is sized to fill the available space.

Manage the stack views appearance

A stack view manages the position and size of its arranged views. There are a number of properties that define how the stack view lays out its content.

  • The axis property determines the stacks orientation, either vertically or horizontally.

  • The distribution property determines the layout of the arranged views along the stacks axis.

  • The alignment property determines the layout of the arranged views perpendicular to the stacks axis.

  • The spacing property determines the minimum spacing between arranged views.

  • The isBaselineRelativeArrangement property determines whether the vertical spacing between views is measured from the baselines.

  • The isLayoutMarginsRelativeArrangement property determines whether the stack view lays out its arranged views relative to its layout margins.

Typically, you use a single stack view to lay out a small number of items. You can build more complex view hierarchies by nesting stack views inside other stack views. For example, the following image shows a vertical stack view containing two horizontal stack views. Each of the horizontal stack views contains a label and a text field.

You can also fine-tune an arranged views appearance by adding additional constraints to the arranged view. For example, you can use constraints to set a minimum or maximum height or width for the view. Or you can define an aspect ratio for the view. The stack view uses these constraints when laying out its content.

Maintain consistency between the arranged views and subviews

The stack view ensures that its arrangedSubviews property is always a subset of its subviews property. Specifically, the stack view enforces the following rules:

  • When the stack view adds a view to its arrangedSubviews array, it also adds that view as a subview, if it isnt already.

  • When a subview is removed from the stack view, the stack view also removes it from the arrangedSubviews array.

  • Removing a view from the arrangedSubviews array doesnt remove it as a subview. The stack view no longer manages the views size and position, but the view is still part of the view hierarchy, and is rendered on screen if its visible.

Although the arrangedSubviews array always contains a subset of the subviews array, the order of these arrays remain independent.

  • The order of the arrangedSubviews array defines the order in which views appear in the stack. For horizontal stacks, the views are laid out in reading order, with the lower index views appearing before the higher index views. In English, for example, the views are laid out in order from left to right. For vertical stacks, the views are laid out from top to bottom, with the lower index views above the higher index views.

  • The order of the subviews array defines the Z-order of the subviews. If the views overlap, subviews with a lower index appear behind subviews with a higher index.

Change the stack views content dynamically

The stack view automatically updates its layout whenever views are added, removed, or inserted into the arrangedSubviews array, or whenever one of the arranged subviewss isHidden property changes.

// Appears to remove the first arranged view from the stack. // The view is still inside the stack, it's just no longer visible, and no longer contributes to the layout. let firstView = stackView.arrangedSubviews[0] firstView.isHidden = true

// Appears to remove the first arranged view from the stack. // The view is still inside the stack, it's just no longer visible, and no longer contributes to the layout. UIView * firstView = self.stackView.arrangedSubviews[0]; firstView.hidden = YES;

The stack view also automatically responds to changes to any of its properties. For example, you can dynamically change the stacks orientation, by updating the stack views axis property.

// Toggle between a vertical and horizontal stack. if stackView.axis == .horizontal { stackView.axis = .vertical } else { stackView.axis = .horizontal }

// Toggle between a vertical and horizontal stack. if (self.stackView.axis == UILayoutConstraintAxisHorizontal) { self.stackView.axis = UILayoutConstraintAxisVertical; } else { self.stackView.axis = UILayoutConstraintAxisHorizontal; }

You can animate both changes to the arranged subviews isHidden property and changes to the stack views properties by placing these changes inside an animation block.

// Animates removing the first item in the stack.

let firstView = stackView.arrangedSubviews[0] firstView.isHidden = true }

// Animates removing the first item in the stack. [UIView animateWithDuration:0.25 animations:^{
UIView * firstView = self.stackView.arrangedSubviews[0];
firstView.hidden = YES;
}];

Finally, you can define size-class specific values for many of the stack views properties directly in Interface Builder. The system automatically animates these changes whenever the stack views size class changes.

Topics

Initializing a stack view

convenience init(arrangedSubviews: [UIView])

Returns a new stack view object that manages the provided views.

init(frame: CGRect)

Creates a stack view with the specified frame.

init(coder: NSCoder)

Creates a stack view from data in an unarchiver.

Managing arranged subviews

func addArrangedSubview(UIView)

Adds a view to the end of the arranged subviews array.

var arrangedSubviews: [UIView]

The list of views arranged by the stack view.

func insertArrangedSubview(UIView, at: Int)

Adds the provided view to the array of arranged subviews at the specified index.

func removeArrangedSubview(UIView)

Removes the provided view from the stacks array of arranged subviews.

Configuring the layout

var axis: NSLayoutConstraint.Axis

The axis along which the arranged views lay out.

var alignment: UIStackView.Alignment

The alignment of the arranged subviews perpendicular to the stack views axis.

var distribution: UIStackView.Distribution

The distribution of the arranged views along the stack views axis.

var spacing: CGFloat

The distance in points between the adjacent edges of the stack views arranged views.

var isBaselineRelativeArrangement: Bool

A Boolean value that determines whether the vertical spacing between views is measured from their baselines.

var isLayoutMarginsRelativeArrangement: Bool

A Boolean value that determines whether the stack view lays out its arranged views relative to its layout margins.

Adding space between items

Returns the custom spacing after the specified view.

func setCustomSpacing(CGFloat, after: UIView)

Applies custom spacing after the specified view.

class let spacingUseDefault: CGFloat

The default spacing for subviews within a stack view.

class let spacingUseSystem: CGFloat

The system-defined spacing to the neighboring view.

Constants

enum Distribution

The layout that defines the size and position of the arranged views along the stack views axis.

enum Alignment

The layout of arranged views perpendicular to the stack views axis.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

https://developer.apple.com/documentation/uikit/uiscrollview

  • UIKit
  • UIScrollView

Class

UIScrollView

A view that allows the scrolling and zooming of its contained views.

tvOS

@MainActor class UIScrollView

Overview

UIScrollView is the superclass of several UIKit classes, including UITableView and UITextView.

A scroll view is a view with an origin thats adjustable over the content view. It clips the content to its frame, which generally (but not necessarily) coincides with that of the apps main window. A scroll view tracks the movements of fingers, and adjusts the origin accordingly. The view that shows its content through the scroll view draws that portion of itself according to the new origin, which is pinned to an offset in the content view. The scroll view itself does no drawing except for displaying vertical and horizontal scroll indicators. The scroll view must know the size of the content view so it knows when to stop scrolling. By default, it bounces back when scrolling exceeds the bounds of the content.

The object that manages the drawing of content that displays in a scroll view needs to tile the contents subviews so that no view exceeds the size of the screen. As users scroll in the scroll view, this object adds and removes subviews as necessary.

Because a scroll view has no scroll bars, it must know whether a touch signals an intent to scroll versus an intent to track a subview in the content. To make this determination, it temporarily intercepts a touch-down event by starting a timer and, before the timer fires, seeing if the touching finger makes any movement. If the timer fires without a significant change in position, the scroll view sends tracking events to the touched subview of the content view. If the user then drags their finger far enough before the timer elapses, the scroll view cancels any tracking in the subview and performs the scrolling itself. Subclasses can override the touchesShouldBegin(_:with:in:), isPagingEnabled, and touchesShouldCancel(in:) methods (which the scroll view calls) to affect how the scroll view handles scrolling gestures.

A scroll view also handles zooming and panning of content. As the user makes a pinch-in or pinch-out gesture, the scroll view adjusts the offset and the scale of the content. When the gesture ends, the object managing the content view updates subviews of the content as necessary. (Note that the gesture can end and a finger might still be down.) While the gesture is in progress, the scroll view doesnt send any tracking calls to the subview.

The UIScrollView class can have a delegate that must adopt the UIScrollViewDelegate protocol. For zooming and panning to work, the delegate must implement both viewForZooming(in:) and scrollViewDidEndZooming(_:with:atScale:). In addition, the maximumZoomScale and minimumZoomScale zoom scales must be different.

State preservation

If you assign a value to this views restorationIdentifier property, it attempts to preserve its scrolling-related information between app launches. Specifically, the values of the zoomScale, contentInset, and contentOffset properties are preserved. During restoration, the scroll view restores these values so that the content appears scrolled to the same position as before. For more information about how state preservation and restoration works, see App Programming Guide for iOS.

Topics

Responding to scroll view interactions

var delegate: (any UIScrollViewDelegate)?

The delegate of the scroll view.

protocol UIScrollViewDelegate

The interface for the delegate of a scroll view.

Managing the content size and offset

var contentSize: CGSize

The size of the content view.

var contentOffset: CGPoint

The point at which the origin of the content view is offset from the origin of the scroll view.

func setContentOffset(CGPoint, animated: Bool)

Sets the offset from the content views origin that corresponds to the scroll views origin.

Managing the content inset behavior

var adjustedContentInset: UIEdgeInsets

The insets derived from the content insets and the safe area of the scroll view.

var contentInset: UIEdgeInsets

The custom distance that the content view is inset from the safe area or scroll view edges.

var contentInsetAdjustmentBehavior: UIScrollView.ContentInsetAdjustmentBehavior

The behavior for determining the adjusted content offsets.

enum ContentInsetAdjustmentBehavior

Constants indicating how safe area insets are added to the adjusted content inset.

func adjustedContentInsetDidChange()

Notifies the scroll view when the adjusted content insets of the scroll view change.

Getting the layout guides

var frameLayoutGuide: UILayoutGuide

The layout guide based on the untransformed frame rectangle of the scroll view.

var contentLayoutGuide: UILayoutGuide

The layout guide based on the untranslated content rectangle of the scroll view.

Configuring the scroll view

var isScrollEnabled: Bool

A Boolean value that determines whether scrolling is enabled.

var isDirectionalLockEnabled: Bool

A Boolean value that determines whether scrolling is disabled in a particular direction.

var isPagingEnabled: Bool

A Boolean value that determines whether paging is enabled for the scroll view.

var scrollsToTop: Bool

A Boolean value that controls whether the scroll-to-top gesture is enabled.

var bounces: Bool

A Boolean value that controls whether the scroll view bounces past the edge of content and back again.

var bouncesHorizontally: Bool

A Boolean value that determines whether the scroll view bounces when it reaches the ends of its horizontal axis.

var bouncesVertically: Bool

A Boolean value that determines whether the scroll view bounces when it reaches the ends of its vertical axis.

var alwaysBounceVertical: Bool

A Boolean value that determines whether bouncing always occurs when vertical scrolling reaches the end of the content.

var alwaysBounceHorizontal: Bool

A Boolean value that determines whether bouncing always occurs when horizontal scrolling reaches the end of the content view.

Managing the scrolling state

var isTracking: Bool

A Boolean value that indicates whether the user has touched the content to initiate scrolling.

var isDragging: Bool

A Boolean value that indicates whether the user has begun scrolling the content.

var isDecelerating: Bool

A Boolean value that indicates whether the content is moving in the scroll view after the user lifted their finger.

var isScrollAnimating: Bool

A Boolean value that indicates whether the scroll view is currently animating a scroll update.

func stopScrollingAndZooming()

Stops active scroll and zoom animations.

var decelerationRate: UIScrollView.DecelerationRate

A floating-point value that determines the rate of deceleration after the user lifts their finger.

struct DecelerationRate

Deceleration rates for the scroll view.

Applying edge effects

var bottomEdgeEffect: UIScrollEdgeEffect

The effect for the bottom edge of the scroll view.

Beta

var leftEdgeEffect: UIScrollEdgeEffect

The effect for the left edge of the scroll view.

var rightEdgeEffect: UIScrollEdgeEffect

The effect for the right edge of the scroll view.

var topEdgeEffect: UIScrollEdgeEffect

The effect for the top edge of the scroll view.

class UIScrollEdgeEffect

Properties of the effect on a particular edge of the scroll view.

class Style

Styles for a scroll views edge effect.

Managing the scroll indicator and refresh control

var indicatorStyle: UIScrollView.IndicatorStyle

The style of the scroll indicators.

enum IndicatorStyle

Defines constants that represent the styles of the scroll indicators.

var showsHorizontalScrollIndicator: Bool

A Boolean value that controls whether the horizontal scroll indicator is visible.

var showsVerticalScrollIndicator: Bool

A Boolean value that controls whether the vertical scroll indicator is visible.

var horizontalScrollIndicatorInsets: UIEdgeInsets

The horizontal distance the scroll indicators are inset from the edge of the scroll view.

var verticalScrollIndicatorInsets: UIEdgeInsets

The vertical distance the scroll indicators are inset from the edge of the scroll view.

var automaticallyAdjustsScrollIndicatorInsets: Bool

A Boolean value that indicates whether the system automatically adjusts the scroll indicator insets.

func flashScrollIndicators()

Displays the scroll indicators momentarily.

Displays the scroll indicators during updates to the scroll views content offset.

var refreshControl: UIRefreshControl?

The refresh control associated with the scroll view.

class UIRefreshControl

A standard control that can initiate the refreshing of a scroll views contents.

Scrolling to a specific location

func scrollRectToVisible(CGRect, animated: Bool)

Scrolls a specific area of the content so that its visible in the scroll view.

Managing touches

Overridden by subclasses to customize the default behavior when a finger touches down in displayed content.

Returns whether to cancel touches related to the content subview and start dragging.

var canCancelContentTouches: Bool

A Boolean value that controls whether touches in the content view always lead to tracking.

var delaysContentTouches: Bool

A Boolean value that determines whether the scroll view delays the handling of touch-down gestures.

var directionalPressGestureRecognizer: UIGestureRecognizer

The underlying gesture recognizer for directional button presses.

Zooming and panning

var panGestureRecognizer: UIPanGestureRecognizer

The underlying gesture recognizer for pan gestures.

var pinchGestureRecognizer: UIPinchGestureRecognizer?

The underlying gesture recognizer for pinch gestures.

func zoom(to: CGRect, animated: Bool)

Zooms to a specific area of the content so that its visible in the scroll view.

var zoomScale: CGFloat

A floating-point value that specifies the current scale factor applied to the scroll views content.

func setZoomScale(CGFloat, animated: Bool)

A floating-point value that specifies the current zoom scale.

var maximumZoomScale: CGFloat

A floating-point value that specifies the maximum scale factor that can apply to the scroll views content.

var minimumZoomScale: CGFloat

A floating-point value that specifies the minimum scale factor that can apply to the scroll views content.

var isZoomBouncing: Bool

A Boolean value that indicates that zooming has exceeded the scaling limits specified for the scroll view.

var isZooming: Bool

A Boolean value that indicates whether the content view is currently zooming in or out.

var isZoomAnimating: Bool

A Boolean value that indicates whether the scroll view is currently animating a zoom update.

var bouncesZoom: Bool

A Boolean value that determines whether the scroll view animates the content scaling when the scaling exceeds the maximum or minimum limits.

Dismissing the keyboard

var keyboardDismissMode: UIScrollView.KeyboardDismissMode

The manner in which the system dismisses the keyboard when a drag begins in the scroll view.

enum KeyboardDismissMode

Constants that determine how the system dismisses the keyboard when a drag begins in the scroll view.

Managing the index

var indexDisplayMode: UIScrollView.IndexDisplayMode

The manner in which the index appears while the user is scrolling.

enum IndexDisplayMode

Defines constants that represent how the index appears while the user is scrolling.

Controlling content alignment

var contentAlignmentPoint: CGPoint

A point where the scroll view anchors content thats smaller than the scroll views frame.

Nesting scroll views

var transfersHorizontalScrollingToParent: Bool

A Boolean value that determines whether the scroll view passes horizontal scroll events to a superview.

var transfersVerticalScrollingToParent: Bool

A Boolean value that determines whether the scroll view passes vertical scroll events to a superview.

Deprecated

var scrollIndicatorInsets: UIEdgeInsets

The distance the scroll indicators are inset from the edge of the scroll view.

Deprecated

Instance Properties

var allowsKeyboardScrolling: Bool

A Boolean value that determines whether the scroll view allows scrolling its content with hardware keyboard input.

var lookToScrollAxes: UIAxis

Defines which axes are considered for Look to Scroll. Does not affect when isPagingEnabled is true.

Relationships

Inherits From

  • UIView

Inherited By

  • UICollectionView
  • UITableView
  • UITextView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UIFocusItemScrollableContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Container views

Autosizing Views for Localization in iOS

Add auto layout constraints to your app to achieve localizable views.

Display nested views using a configurable and highly customizable layout.

Display data in a single column of customizable rows.

class UIStackView

A streamlined interface for laying out a collection of views in either a column or a row.


https://developer.apple.com/documentation/uikit/uiactivityindicatorview

  • UIKit
  • UIActivityIndicatorView

Class

UIActivityIndicatorView

A view that shows that a task is in progress.

tvOS

@MainActor class UIActivityIndicatorView

Overview

You control when an activity indicator animates by calling the startAnimating() and stopAnimating() methods. To automatically hide the activity indicator when animation stops, set the hidesWhenStopped property to true.

You can set the color of the activity indicator by using the color property.

Topics

Creating an activity indicator

init(style: UIActivityIndicatorView.Style)

Creates an activity indicator.

init(frame: CGRect)

Creates an activity indicator with the specified frame rectangle.

init(coder: NSCoder)

Creates an activity indicator from data in an unarchiver.

Managing an activity indicator

func startAnimating()

Starts the animation of the progress indicator.

func stopAnimating()

Stops the animation of the progress indicator.

var isAnimating: Bool

A Boolean value indicating whether the activity indicator is currently running its animation.

var hidesWhenStopped: Bool

A Boolean value that controls whether the activity indicator is hidden when the animation is stopped.

Configuring the activity indicator appearance

var style: UIActivityIndicatorView.Style

The basic appearance of the activity indicator.

var color: UIColor!

The color of the activity indicator.

Constants

enum Style

The visual style of the progress indicator.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Content views

class UICalendarView

A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.

class UIContentUnavailableView

A view that indicates theres no content to display.

class UIImageView

A view that displays a single image or a sequence of animated images in your interface.

class UIPickerView

A view that uses a spinning-wheel or slot-machine metaphor to show one or more sets of values.

class UIProgressView

A view that depicts the progress of a task over time.

class UIWebView

A view that embeds web content in your app.

Deprecated


https://developer.apple.com/documentation/uikit/uicalendarview

  • UIKit
  • UICalendarView

Class

UICalendarView

A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.

@MainActor class UICalendarView

Overview

Use a calendar view to show users specific dates that have additional information (for example, scheduled events) using decorations that you customize. You can also use a calendar view for users to select one specific date, multiple dates, or no date.

To add a calendar view to your interface:

  • Configure the Calendar and Locale for your calendar view to display.

  • Set a date for the calendar view to initially make visible.

  • Create a delegate to provide decorations on specific dates, if desired.

  • Set a selection method and delegate to handle date selection.

  • Set up Auto Layout to position the calendar view in your interface.

You use a calendar view only for the display and selection of dates. If you want to handle date and time selection, use UIDatePicker.

Configure a calendar view

Configure your calendar view to display the type of calendar appropriate to the users location and cultural preference, in the users preferred language. By default, a calendar view selects the users current Calendar and Locale. If users can select a different calendar or locale in your app, configure the calendar view to use those selections.

// Create the calendar view. let calendarView = UICalendarView()

// Create an instance of the Gregorian calendar. let gregorianCalendar = Calendar(identifier: .gregorian)

// Set the calendar displayed by the view. calendarView.calendar = gregorianCalendar

// Set the calendar view's locale. calendarView.locale = Locale(identifier: "zh_TW")

// Set the font design to the rounded system font. calendarView.fontDesign = .rounded

Then, set the calendar views initial display to a starting date thats appropriate for your use case.

// Set the date to display. calendarView.visibleDateComponents = DateComponents( calendar: gregorianCalendar, year: 2024, month: 2, day: 1 )

If you want to restrict the earliest or latest dates a user can view or select in your calendar view, set the availableDateRange.

// Specify the starting date. let fromDateComponents = DateComponents( calendar: gregorianCalendar, year: 2024, month: 1, day: 1 )

// Specify the ending date. let toDateComponents = DateComponents( calendar: gregorianCalendar, year: 2024, month: 12, day: 31 )

// Verify that you have valid start and end dates. guard let fromDate = fromDateComponents.date, let toDate = toDateComponents.date else { // Handle the error here. fatalError("Invalid date components: (fromDateComponents) and (toDateComponents)") }

// Set the range of dates that people can view. let calendarViewDateRange = DateInterval(start: fromDate, end: toDate) calendarView.availableDateRange = calendarViewDateRange

Display decorations for specific dates

Use decorations to show users which specific dates have additional information. Add meaning or emphasis to the decorations by setting the color, size, image, or custom view that you display for a specific date. To display decorations in your calendar view, create a custom UICalendarViewDelegate object, implement calendarView(_:decorationFor:), and set your custom object as the calendar views delegate.

// Define a calendar view delegate. class CalendarViewDelegate: NSObject, UICalendarViewDelegate {

var calendarView: UICalendarView? = nil var decorations: [Date?: UICalendarView.Decoration]

override init() { // Create the date components for Valentine's day that // contain the calendar, year, month, and day. let valentinesDay = DateComponents( calendar: Calendar(identifier: .gregorian), year: 2024, month: 2, day: 14 )

// Create a calendar decoration for Valentine's day. let heart = UICalendarView.Decoration.image( UIImage(systemName: "heart.fill"), color: UIColor.red, size: .large )

decorations = [valentinesDay.date: heart] }

// Return a decoration (if any) for the specified day.

// Get a copy of the date components that only contain // the calendar, year, month, and day. let day = DateComponents( calendar: dateComponents.calendar, year: dateComponents.year, month: dateComponents.month, day: dateComponents.day )

// Return any decoration saved for that date. return decorations[day.date] } }

In your implementation, you can decide which type of UICalendarView.Decoration best illustrates your users events:

  • The default decoration, which displays a filled circle you can customize with a color and relative size

  • An image decoration, which you can customize with a system symbol or image, color, and relative size

  • A custom decoration, which you can customize with a closure that returns your custom view

When your data changes, tell the calendar view to reload decoration views.

// Add a decoration to the specified date. func add(decoration: UICalendarView.Decoration, on date: Date) { // Get the calendar, year, month, and day date components for // the specified date. let dateComponents = Calendar.current.dateComponents( [.calendar, .year, .month, .day ], from: date )

// Add the decoration to the decorations dictionary. decorations[dateComponents.date] = decoration

// Reload the calendar view's decorations. if let calendarView { calendarView.reloadDecorations( forDateComponents: [dateComponents], animated: true ) } }

Handle date selection

Let users select a single date, multiple dates, or no date with your calendar view. First, decide which type of date selection you want. Then create a selection object and delegate for that type, and assign it to the calendar views selectionBehavior.

let dateSelection = UICalendarSelectionSingleDate(delegate: self) calendarView.selectionBehavior = dateSelection

The user can then select a date from the calendar view. You can set a selected date programmatically as the following example shows:

let date = DateComponents( calendar: Calendar(identifier: .gregorian), year: 2024, month: 2, day: 14 )

// Programmatically set the selected date. dateSelection.selectedDate = date

Next, implement the delegate methods for the selection method to customize your date selection handling.

// Control whether a person can select a given date. func dateSelection( _ selection: UICalendarSelectionSingleDate, canSelectDate dateComponents: DateComponents?

// Allow all dates by returning true if the selection parameter contains // a date component instance. Prevent someone from clearing the selection // by returning false if the selection parameter is nil. return dateComponents != nil }

// Respond when someone selects or deselects a date. If they selected // a date, the dateComponent parameter contains the selected date. If they // cleared the selection, the parameter is nil. func dateSelection(_ selection: UICalendarSelectionSingleDate, didSelectDate dateComponents: DateComponents?) { // Update your app. }

Topics

Setting calendar details

var calendar: Calendar

The calendar that the calendar view illustrates.

var locale: Locale

The locale the calendar view uses for calendar conventions.

var timeZone: TimeZone?

The time zone from the date the calendar view displays.

Setting the visible date and range

var visibleDateComponents: DateComponents

The date components that represent the visible date in the calendar view.

func setVisibleDateComponents(DateComponents, animated: Bool)

Sets the date components that represent the date for the calendar view to make visible, with an option to animate the date change.

var availableDateRange: DateInterval

The range of dates that the calendar view displays.

Customizing the calendar display

var fontDesign: UIFontDescriptor.SystemDesign

A font design that the calendar view uses for displaying calendar text.

var delegate: (any UICalendarViewDelegate)?

A delegate object the calendar view calls for decoration views.

protocol UICalendarViewDelegate

An object that a calendar view uses to display decorations for dates.

class Decoration

A view that a calendar view displays for a specific date.

enum DecorationSize

Constants that indicate the relative size of a decoration in a calendar view.

var wantsDateDecorations: Bool

A Boolean value that indicates whether the calendar view displays date decorations.

func reloadDecorations(forDateComponents: [DateComponents], animated: Bool)

Reloads the decorations for the dates you provide, with an option to animate the decoration reload.

Handling date selections

var selectionBehavior: UICalendarSelection?

The current date selection method of the calendar view.

class UICalendarSelectionSingleDate

An object that tracks a date the user selects from a calendar view.

class UICalendarSelectionMultiDate

An object that tracks multiple dates the user selects from a calendar view.

class UICalendarSelectionWeekOfYear

An object that tracks a specific week a person selects from a calendar view.

class UICalendarSelection

A base object that tracks one or more dates a user selects from a calendar view.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Content views

class UIActivityIndicatorView

A view that shows that a task is in progress.

class UIContentUnavailableView

A view that indicates theres no content to display.

class UIImageView

A view that displays a single image or a sequence of animated images in your interface.

class UIPickerView

A view that uses a spinning-wheel or slot-machine metaphor to show one or more sets of values.

class UIProgressView

A view that depicts the progress of a task over time.

class UIWebView

A view that embeds web content in your app.

Deprecated


https://developer.apple.com/documentation/uikit/uicontentunavailableview

  • UIKit
  • UIContentUnavailableView

Class

UIContentUnavailableView

A view that indicates theres no content to display.

@MainActor class UIContentUnavailableView

Overview

Use a content-unavailable view to indicate that your app cant display content. For example, content may not be available if a search returns no results or your app is loading data over the network.

In many cases, you wont need to create a view of this type directly. Set a UIContentUnavailableConfiguration as the view controllers contentUnavailableConfiguration, and the view controller manages the layout of the content-unavailable view.

Topics

Initializers

init(coder: NSCoder)

Creates a view from data in an unarchiver.

convenience init(configuration: UIContentUnavailableConfiguration)

Creates a new content-unavailable view with the specified configuration.

Instance Properties

var isScrollEnabled: Bool

A Boolean value that determines whether the view content can scroll.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContentView
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Content views

class UIActivityIndicatorView

A view that shows that a task is in progress.

class UICalendarView

A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.

class UIImageView

A view that displays a single image or a sequence of animated images in your interface.

class UIPickerView

A view that uses a spinning-wheel or slot-machine metaphor to show one or more sets of values.

class UIProgressView

A view that depicts the progress of a task over time.

class UIWebView

A view that embeds web content in your app.

Deprecated


https://developer.apple.com/documentation/uikit/uiimageview

  • UIKit
  • UIImageView

Class

UIImageView

A view that displays a single image or a sequence of animated images in your interface.

tvOS

@MainActor class UIImageView

Overview

Image views let you efficiently draw any image that can be specified using a UIImage object. For example, you can use the UIImageView class to display the contents of many standard image files, such as JPEG and PNG files. You can configure image views programmatically or in your storyboard file and change the images they display at runtime. For animated images, you can also use the methods of this class to start and stop the animation and specify other animation parameters.

Understand how images are scaled

An image view uses its contentMode property and the configuration of the image itself to determine how to display the image. Its best to specify images whose dimensions match the dimensions of the image view exactly, but image views can scale your images to fit all or some of the available space. If the size of the image view itself changes, it automatically scales the image as needed.

For an image without cap insets, the presentation of the image is determined solely by the image views contentMode property. The UIView.ContentMode.scaleAspectFit and UIView.ContentMode.scaleAspectFill modes scale the image to fit or fill the space while maintaining the images original aspect ratio. The UIView.ContentMode.scaleToFill value scales the image without regard to the original aspect ratio, which can cause the image to appear distorted. Other content modes place the image at the appropriate location in the image views bounds without scaling it.

For a resizable image with cap insets, those insets affect the final appearance of the image. Specifically, cap insets define which parts of the image may be scaled and in which directions. You can create a resizable image that stretches using the resizableImage(withCapInsets:resizingMode:) method of UIImage. When using an image of this type, you typically set the image views content mode to UIView.ContentMode.scaleToFill so that the image stretches in the appropriate places and fills the image views bounds.

For tips on how to prepare images, see Debug issues with your image view. For more information on creating resizable images with cap insets, see UIImage.

Determine the final transparency of the image

Images are composited onto the image views background and are then composited into the rest of the window. Any transparency in the image allows the image views background to show through. Similarly, any further transparency in the background of the image is dependent on the transparency of the image view and the transparency of the UIImage object it displays. When the image view and its image both have transparency, the image view uses alpha blending to combine the two.

  • The image is composited onto the image views background.

  • If the image views isOpaque property is true, the images pixels are composited on top of the image views background color and the alpha property of the image view is ignored.

  • If the image views isOpaque property is false, the alpha value of each pixel is multiplied by the image views alpha value, with the resulting value becoming the actual transparency value for that pixel. If the image doesnt have an alpha channel, the alpha value of each pixel is assumed to be 1.0.

Animate a sequence of images

An image view can store an animated image sequence and play all or part of that sequence. You specify an image sequence as an array of UIImage objects and assign them to the animationImages property. Once assigned, you can use the methods and properties of this class to configure the animation timing and to start and stop the animation.

Consider the following tips when displaying a sequence of animated images:

  • All images in the sequence should have the same size. When scaling is required, the image view scales each image in the sequence separately. If the images are different sizes, scaling may not yield the results you want.

  • All images in the sequence should use the same content scale factor. Make sure the scale property of each image contains the same value.

Respond to touch events

Image views ignore user events by default. Normally, you use image views only to present visual content in your interface. If you want an image view to handle user interactions as well, change the value of its isUserInteractionEnabled property to true. After doing that, you can attach gesture recognizers or use any other event handling techniques to respond to touch events or other user-initiated events.

For more information about handling events, see Event Handling Guide for UIKit Apps.

Improve performance

Image scaling and alpha blending are two relatively expensive operations that can impact your apps performance. To maximize performance of your image view code, consider the following tips:

  • Cache scaled versions of frequently used images. If you expect certain large images to be displayed frequently in a scaled-down thumbnail view, consider creating the scaled-down images in advance and storing them in a thumbnail cache. Doing so alleviates the need for each image view to scale them separately.

  • Use images whose size is close to the size of the image view. Rather than assigning a large image to an image view, created a scaled version that matches the current size of the image view. You can also create a resizable image object using the UIImage.ResizingMode.tile option, which tiles the image instead of scaling it.

  • Make your image view opaque whenever possible. Unless youre intentionally working with images that contain transparency (drawing UI elements, for example), make sure the isOpaque property of your image view is set to true. For more information about how transparency is determined, see Determine the final transparency of the image.

Debug issues with your image view

If your image view isnt displaying what you expected, use the following tips to help diagnose the problem:

  • Load images using the correct method. Use the init(named:in:compatibleWith:) method of UIImage to load images from asset catalogs or your apps bundle. For images outside of your apps bundle, use the imageWithContentsOfFile: method.

  • Dont use image views for custom drawing. The UIImageView class doesnt draw its content using the draw(_:) method. Use image views only to present images. To do custom drawing involving images, subclass UIView directly and draw your image there.

Interface Builder attributes

The following table lists the attributes that you configure for image views in Interface Builder.

Attribute Discussion
Image The image to display. You can specify any image in your Xcode project, including standalone images and those in image assets. To set this attribute programmatically, use the image or animationImages property.
Highlighted The image to display when the image view is highlighted. To set this attribute programmatically, use the highlightedImage or highlightedAnimationImages property.
State The initial state of the image. Use this attribute to mark the image as highlighted. To set this attribute programmatically, use the isHighlighted property.

Internationalization

Internationalization of image views is automatic if your view displays only static images loaded from your app bundle. If youre loading images programmatically, youre at least partially responsible for loading the correct image.

  • For resources in your app bundle, you do this by specifying the name in the attributes inspector or by calling the init(named:) class method on UIImage to obtain the localized version of each image.

  • For images that arent in your app bundle, your code must do the following:

  1. Determine which image to load in a manner specific to your app, such as providing a localized string that contains the URL.

  2. Load that image by passing the URL or data for the correct image to an appropriate UIImage class method, such as imageWithData: or imageWithContentsOfFile:.

For more information, see Localization.

Accessibility

Image views are accessible by default. The default accessibility traits for an image view are Image and User Interaction Enabled.

For more information about making iOS controls accessible, see the accessibility information in UIControl. For general information about making your interface accessible, see Accessibility for UIKit.

State preservation

When you assign a value to an image views restorationIdentifier property, it attempts to preserve the frame of the displayed image. Specifically, the class preserves the values of the bounds, center, and transform properties of the view and the anchorPoint property of the underlying layer. During restoration, the image view restores these values so that the image appears exactly as before. For more information about how state preservation and restoration works, see Restoring your apps state.

Topics

Creating an image view

init(image: UIImage?)

Returns an image view initialized with the specified image.

init(image: UIImage?, highlightedImage: UIImage?)

Returns an image view initialized with the specified regular and highlighted images.

Accessing the displayed images

var image: UIImage?

The image displayed in the image view.

var highlightedImage: UIImage?

The highlighted image displayed in the image view.

Animating a sequence of images

var animationImages: [UIImage]?

An array of UIImage objects to use for an animation.

var highlightedAnimationImages: [UIImage]?

An array of UIImage objects to use for an animation when the view is highlighted.

var animationDuration: TimeInterval

The amount of time it takes to go through one cycle of the images.

var animationRepeatCount: Int

Specifies the number of times to repeat the animation.

func startAnimating()

Starts animating the images in the receiver.

func stopAnimating()

Stops animating the images in the receiver.

var isAnimating: Bool

Returns a Boolean value indicating whether the animation is running.

Configuring the image view

var isUserInteractionEnabled: Bool

A Boolean value that determines whether user events are ignored and removed from the event queue.

var isHighlighted: Bool

A Boolean value that determines whether the image is highlighted.

var tintColor: UIColor!

A color used to tint template images in the view hierarchy.

Configuring the appearance of symbol images

Configuring and displaying symbol images in your UI

Create scalable images that integrate with your apps text, and adjust the appearance of those images dynamically.

var preferredSymbolConfiguration: UIImage.SymbolConfiguration?

The configuration values to use when rendering the image.

Configuring symbol effects

func addSymbolEffect(some IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool, completion: UISymbolEffectCompletion?)

Adds a discrete symbol effect to the image view with the specified options and animation.

func addSymbolEffect(some DiscreteSymbolEffect & IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool, completion: UISymbolEffectCompletion?)

Adds a discrete, indefinite symbol effect to the image view with the specified options and animation.

func addSymbolEffect(some DiscreteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool, completion: UISymbolEffectCompletion?)

Adds an indefinite symbol effect to the image view with the specified options and animation.

func setSymbolImage(UIImage, contentTransition: some ContentTransitionSymbolEffect & SymbolEffect, options: SymbolEffectOptions, completion: UISymbolEffectCompletion?)

Sets a symbol image using the specified content-transition effect, options, and completion handler.

func removeSymbolEffect(ofType: some IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool, completion: UISymbolEffectCompletion?)

Removes the symbol effect that matches the specified indefinite effect type, using the specified options and animation setting.

func removeSymbolEffect(ofType: some DiscreteSymbolEffect & IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool, completion: UISymbolEffectCompletion?)

Removes the symbol effect that matches the specified discrete, indefinite effect type, using the specified options and animation setting.

func removeSymbolEffect(ofType: some DiscreteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool, completion: UISymbolEffectCompletion?)

Removes the symbol effect that matches the specified discrete effect type, using the specified options and animation setting.

func removeAllSymbolEffects(options: SymbolEffectOptions, animated: Bool)

Removes all symbol effects from the image view, using the specified options and animation setting.

typealias UISymbolEffectCompletion

A completion handler for adding and removing symbol effects and transitions.

struct UISymbolEffectCompletionContext

Information about a symbol effects addition or removal.

Transitioning between symbol effects

class UISymbolContentTransition

Represents a symbol content transition and options.

Beta

var adjustsImageWhenAncestorFocused: Bool

Allows UIImageView to respond when an ancestor becomes focused.

var focusedFrameGuide: UILayoutGuide

The layout guide to use when the image view is focused.

var masksFocusEffectToContents: Bool

A Boolean value indicating whether the floating focused appearance uses the images alpha channel.

Layering content on top of the image view

var overlayContentView: UIView

A view for hosting layered content on top of the image view.

Specifying the dynamic range

var imageDynamicRange: UIImage.DynamicRange

var preferredImageDynamicRange: UIImage.DynamicRange

enum DynamicRange

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityContentSizeCategoryImageAdjusting
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Content views

class UIActivityIndicatorView

A view that shows that a task is in progress.

class UICalendarView

A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.

class UIContentUnavailableView

A view that indicates theres no content to display.

class UIPickerView

A view that uses a spinning-wheel or slot-machine metaphor to show one or more sets of values.

class UIProgressView

A view that depicts the progress of a task over time.

class UIWebView

A view that embeds web content in your app.

Deprecated


https://developer.apple.com/documentation/uikit/uipickerview


https://developer.apple.com/documentation/uikit/uiprogressview

  • UIKit
  • UIProgressView

Class

UIProgressView

A view that depicts the progress of a task over time.

tvOS

@MainActor class UIProgressView

Overview

The UIProgressView class provides properties for managing the style of the progress bar and for getting and setting values that are pinned to the progress of a task.

For an indeterminate progress indicator — or a “spinner” — use an instance of the UIActivityIndicatorView class.

Topics

Creating a progress view

convenience init(progressViewStyle: UIProgressView.Style)

Creates a progress view with the specified style.

init(frame: CGRect)

Creates a progress view with the specified frame rectangle.

init?(coder: NSCoder)

Creates a progress view from data in an unarchiver.

Managing the progress bar

var progress: Float

The current progress of the progress view.

func setProgress(Float, animated: Bool)

Adjusts the current progress of the progress view, optionally animating the change.

var observedProgress: Progress?

The progress object to use for updating the progress view.

Configuring the progress bar

var progressViewStyle: UIProgressView.Style

The current graphical style of the progress view.

var progressTintColor: UIColor?

The color shown for the portion of the progress bar thats filled.

var progressImage: UIImage?

An image to use for the portion of the progress bar thats filled.

var trackTintColor: UIColor?

The color shown for the portion of the progress bar that isnt filled.

var trackImage: UIImage?

An image to use for the portion of the track that isnt filled.

Constants

enum Style

The styles permitted for the progress bar.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Content views

class UIActivityIndicatorView

A view that shows that a task is in progress.

class UICalendarView

A view that displays a calendar with date-specific decorations, and provides for user selection of a single date or multiple dates.

class UIContentUnavailableView

A view that indicates theres no content to display.

class UIImageView

A view that displays a single image or a sequence of animated images in your interface.

class UIPickerView

A view that uses a spinning-wheel or slot-machine metaphor to show one or more sets of values.

class UIWebView

A view that embeds web content in your app.

Deprecated


https://developer.apple.com/documentation/uikit/uiwebview


https://developer.apple.com/documentation/uikit/responding-to-control-based-events-using-target-action

  • UIKit
  • Views and controls
  • Responding to control-based events using target-action

Article

Responding to control-based events using target-action

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

Overview

User interactions generate thousands of events for your app. Every swipe of the finger or button click, for instance, results in numerous events your app has to process.

Target-action is a design pattern to help you handle these user interactions efficiently. By only registering actions against specific events on your controls, you simplify your event processing, while making your code more maintainable and easier to read.

Use target-action to connect events directly from controls in your UI to methods in your code.

When a person interacts with your control, the control needs to know where to send the event. The destination for the event is the target. View controllers make good targets because theyre adept at handling user interactions, as well as hosting UI controls.

Define the action methods you use to respond to events

With a control assigned to the target, provide a function to call on that target when the event occurs. This is the action method.

Action methods have a distinct signature:

// UIKit. @IBAction func doSomething() @IBAction func doSomething(sender: Any) @IBAction func doSomething(sender: Any, forEvent event: UIEvent)

// AppKit. @IBAction func doSomething() @IBAction func doSomething(sender: Any)

// UIKit.

  • (IBAction)doSomething;
  • (IBAction)doSomething:(id)sender;
  • (IBAction)doSomething:(id)sender forControlEvents:(UIControlEvents)controlEvents;

// AppKit.

  • (IBAction)doSomething;
  • (IBAction)doSomething:(id)sender;

Xcode uses the @IBAction keyword to connect controls in Interface Builder to functions in your code. The keyword also bridges the Swift and Objective-C runtimes, enabling Swift code to call into Objective-C, which is where the target-action functionality lives.

The sender parameter defines where the event comes from; for example, a button. Use the generic type Any to allow any control to call the action method, or specify the sender type when you need more information about the control for event processing. For example, set the sender type to UISlider to read the slider thumb value when someone moves the slider left or right.

// UIKit. @IBAction func adjustVolume(sender: UISlider) { print(sender.value) }

// AppKit. @IBAction func adjustVolume(sender: NSSlider) { NSLog("%@", sender.stringValue) }

// UIKit.

  • (IBAction)adjustVolume:(UISlider *)sender { NSLog(@"%f", sender.value); }

// AppKit.

  • (IBAction)adjustVolume:(NSSlider *)sender { NSLog(@"%@", [sender stringValue]); }

UIKit also supports coupling action methods to specific event types (see UIControl.Event). For example, to set up target-action for a user dragging their finger inside the bounds of a control, register for the event type touchDragInside.

Connect controls to the action methods in Interface Builder

With the target and action methods defined, youre ready to connect them visually to the controls in Interface Builder.

  1. Select the control (the target) you want to connect to the code (the action).

  2. Control-drag the control to the view controller in the document outline.

  3. Select the action method that the control connects to.

You can verify that the control and action are connected by moving the pointer over the circular dot to the left of the action method. When you do, Xcode highlights the control.

Another way to connect is to Control-drag the control from Interface Builder into the view controller.

Enter the name of the action method youd like the control to call and then click Connect.

The following table lists the parameters available for configuration.

Parameter Description
Connection The type of connection to make. Select Action to establish a target-action relationship between the control and the target.
Object The target or object your control is connecting to.
Name The name of the function, or action, your control calls when the event occurs.
Type The type of the control sending the event. Choose Any if you dont require any further information regarding the controls state. Specify the control type if you require more information from the control for event processing.
Event The UIEvent associated with the action. This feature is only available in UIKit.
Arguments The arguments to include in the signature or your target-action method. Choose None to include no arguments. Choose Sender to pass in the control type as the sender. Choose Sender and Event to pass in both the control type and the event that caused the action. This feature is available only in UIKit.

Connecting the target-action this way ensures the method signature and parameters are correct as Xcode generates the action method for you.

Connect a control to your code programmatically

In UIKit, use the addTarget(_:action:for:) method to set up target-action programmatically on a control:

import UIKit

class ViewController: UIViewController { let signInButton = UIButton(type: .system)

override func viewDidLoad() { super.viewDidLoad()

signInButton.translatesAutoresizingMaskIntoConstraints = false signInButton.setTitle("Sign in", for: .normal)

// Target-action. signInButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

view.addSubview(signInButton) signInButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true signInButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true }

@IBAction func buttonTapped(sender: UIButton) { print("Sign in successful 🎉") } }

#import "ViewController.h"

@implementation ViewController

  • (void)viewDidLoad { [super viewDidLoad];

UIButton *signInButton = [UIButton buttonWithType:UIButtonTypeSystem]; [signInButton setTitle:@"Sign in" forState:UIControlStateNormal];

signInButton.translatesAutoresizingMaskIntoConstraints = false;

// Target-action. [signInButton addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:signInButton]; [signInButton.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = true; [signInButton.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = true; }

  • (void)buttonTapped:(UIButton *)sender { NSLog(@"Sign in successful 🎉"); } @end

In AppKit, use the controls target and action properties to set target-action programmatically:

import Cocoa

class ViewController: NSViewController { let signInButton = NSButton()

signInButton.translatesAutoresizingMaskIntoConstraints = false signInButton.title = "Sign in"

// Target-action. signInButton.target = self signInButton.action = #selector(buttonTapped(sender:))

@IBAction func buttonTapped(sender: NSButton) { print("Sign in successful 🎉") } }

#import "ViewController.h"

NSButton *signInButton = [[NSButton alloc] initWithFrame: NSMakeRect(20, 20, 100, 80)]; signInButton.translatesAutoresizingMaskIntoConstraints = NO; signInButton.title = @"Sign in"; signInButton.bezelStyle = NSBezelStyleRounded;

// Target-action. signInButton.target = self; signInButton.action = @selector(buttonTapped:);

[self.view addSubview:signInButton]; [signInButton.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES; [signInButton.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES; }

  • (void)buttonTapped:(NSButton *)sender { NSLog(@"Sign in successful 🎉"); }

@end

When the object hosting the control isnt the one you want handling the event, invoke the responder chain by passing in nil as the target. This causes the control to search the responder chain for the specified action method and invoke it when found. For more information, see Using responders and the responder chain to handle events.

See Also

Controls

class UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

class UISlider

A control for selecting a single value from a continuous range of values.

class UIStepper

A control for incrementing or decrementing a value.

class UISwitch

A control that offers a binary choice, such as on/off.


https://developer.apple.com/documentation/uikit/uibutton


https://developer.apple.com/documentation/uikit/uicolorwell


https://developer.apple.com/documentation/uikit/uidatepicker


https://developer.apple.com/documentation/uikit/uipagecontrol


https://developer.apple.com/documentation/uikit/uisegmentedcontrol

  • UIKit
  • UISegmentedControl

Class

UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

tvOS

@MainActor class UISegmentedControl

Mentioned in

Attaching gesture recognizers to UIKit controls

Overview

A segmented control can display a title (an NSString object) or an image ( UIImage object). The UISegmentedControl object automatically resizes segments to fit proportionally within their superview unless they have a specific width set. When you add and remove segments, you can request that the action be animated with sliding and fading effects.

You register the target-action methods for a segmented control using the valueChanged constant as shown below.

segmentedControl.addTarget(self, action: "action:", forControlEvents: .valueChanged)

[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];

How you configure a segmented control can affect its display behavior:

  • If you set a segmented control to have a momentary style, a segment doesnt show itself as selected (blue background) when the user touches it. The disclosure button is always momentary and doesnt affect the actual selection.

  • In versions of iOS prior to 3.0, if a segmented control has only two segments, then it behaves like a switch — tapping the currently-selected segment causes the other segment to be selected. In iOS 3.0 and later, tapping the currently-selected segment doesnt cause the other segment to be selected.

Customize appearance

You can customize the appearance of segmented controls using the methods listed in Customizing appearance. You can customize the appearance of all segmented controls using the appearance proxy (for example, [UISegmentedControl appearance]), or just of a single control.

When customizing appearance, in general, you should specify a value for the normal state of a property to be used by other states which dont have a custom value set. Similarly, when a property is dependent on the bar metrics (on the iPhone in landscape orientation, bars have a different height from standard), you should make sure you specify a value for UIBarMetrics.default.

In the case of the segmented control, appearance properties for landscapePhone are only respected for segmented controls in the smaller navigation and toolbars that are used in landscape orientation on the iPhone.

To provide complete customization, you need to provide divider images for different state combinations, using setDividerImage(_:forLeftSegmentState:rightSegmentState:barMetrics:):

// Image between two unselected segments. mySegmentedControl.setDividerImage(myImage, forLeftSegmentState: UIControlState.Normal, rightSegmentState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

// Image between segment selected on the left and unselected on the right. mySegmentedControl.setDividerImage(myImage, forLeftSegmentState: UIControlState.Selected, rightSegmentState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

// Image between segment selected on the right and unselected on the left. mySegmentedControl.setDividerImage(myImage, forLeftSegmentState: UIControlState.Normal, rightSegmentState: UIControlState.Selected, barMetrics: UIBarMetrics.Default)

// Image between two unselected segments. [mySegmentedControl setDividerImage:image1 forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateNormal barMetrics:barMetrics]; // Image between segment selected on the left and unselected on the right. [mySegmentedControl setDividerImage:image1 forLeftSegmentState:UIControlStateSelected
rightSegmentState:UIControlStateNormal barMetrics:barMetrics]; // Image between segment selected on the right and unselected on the right. [mySegmentedControl setDividerImage:image1 forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateSelected barMetrics:barMetrics];

Topics

Creating a segmented control

init(items: [Any]?)

Creates a segmented control with segments having the given titles or images.

convenience init(frame: CGRect, actions: [UIAction])

Creates a segmented control with the given frame and adds segments for the actions you specify.

init(frame: CGRect)

Creates an empty segmented control with the frame you specify.

init?(coder: NSCoder)

Creates a segmented control with data from an unarchiver.

Managing segment content

func setImage(UIImage?, forSegmentAt: Int)

Sets the content of a segment to a given image.

Returns the image for a specific segment.

func setTitle(String?, forSegmentAt: Int)

Sets the title of a segment.

Returns the title of the specified segment.

Managing segment actions

Fetches the action of the segment at the index you specify, if one exists.

func setAction(UIAction, forSegmentAt: Int)

Sets the action for the segment at the index you specify.

Managing segments

var numberOfSegments: Int

Returns the number of segments the segmented control has.

The index of a segment with an action that has an identifier matching the identifier you specify.

func insertSegment(action: UIAction, at: Int, animated: Bool)

Insert a segment with the action you specify at the given index.

func insertSegment(with: UIImage?, at: Int, animated: Bool)

Inserts a segment at the position you specify and gives it an image as content.

func insertSegment(withTitle: String?, at: Int, animated: Bool)

Inserts a segment at the position you specify and gives it a title as content.

func removeAllSegments()

Removes all segments of the segmented control.

func removeSegment(at: Int, animated: Bool)

Removes the segment you specify from the segmented control, optionally animating the transition.

var selectedSegmentIndex: Int

The index number that identifies the selected segment that the user last touched.

class var noSegment: Int

A segment index value indicating that theres no selected segment.

Managing segment behavior and appearance

var isMomentary: Bool

A Boolean value that determines whether segments in the segmented control show selected state.

func setEnabled(Bool, forSegmentAt: Int)

Enables the segment you specify.

Returns whether the indicated segment is enabled.

func setContentOffset(CGSize, forSegmentAt: Int)

Adjusts the offset for drawing the content (image or text) of the specified segment.

Returns the offset for drawing the content (image or text) of the segment you specify.

func setWidth(CGFloat, forSegmentAt: Int)

Sets the width of the segment at the index you specify.

Returns the width of the segment at the index you specify.

var apportionsSegmentWidthsByContent: Bool

Indicates whether the control attempts to adjust segment widths based on their content widths.

Customizing appearance

var selectedSegmentTintColor: UIColor?

The color to use for highlighting the currently selected segment.

Returns the background image for a given state and bar metrics.

func setBackgroundImage(UIImage?, for: UIControl.State, barMetrics: UIBarMetrics)

Sets the background image for given state and bar metrics.

Returns the positioning offset for a given segment and bar metrics.

func setContentPositionAdjustment(UIOffset, forSegmentType: UISegmentedControl.Segment, barMetrics: UIBarMetrics)

Sets the content positioning offset for a given segment and bar metrics.

enum Segment

Constants for specifying a segment in a control.

Returns the divider image used for a given combination of left and right segment states and bar metrics.

func setDividerImage(UIImage?, forLeftSegmentState: UIControl.State, rightSegmentState: UIControl.State, barMetrics: UIBarMetrics)

Sets the divider image to use for a given combination of left and right segment states and bar metrics.

Returns the text attributes of the title for a given control state.

func setTitleTextAttributes([NSAttributedString.Key : Any]?, for: UIControl.State)

Sets the text attributes of the title for a given control state.

Relationships

Inherits From

  • UIControl

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UISpringLoadedInteractionSupporting
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Controls

Responding to control-based events using target-action

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

class UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISlider

A control for selecting a single value from a continuous range of values.

class UIStepper

A control for incrementing or decrementing a value.

class UISwitch

A control that offers a binary choice, such as on/off.


https://developer.apple.com/documentation/uikit/uislider

  • UIKit
  • UISlider

Class

UISlider

A control for selecting a single value from a continuous range of values.

@MainActor class UISlider

Mentioned in

Choosing a user interface idiom for your Mac app

Attaching gesture recognizers to UIKit controls

Responding to control-based events using target-action

Overview

As you move the thumb of a slider, it passes its updated value to any actions attached to it. The appearance of sliders is configurable; you can tint the track and the thumb, and provide images to appear at the ends of the slider. You can add sliders to your interface programmatically or by using Interface Builder.

The following image shows the terms used to describe the constituent parts of a UISlider object in a left-to-right configuration.

To add a slider to your interface:

  • Specify the range of values the slider represents.

  • Optionally, configure the appearance of the slider with appropriate tint colors, and limit images.

  • Connect one or more action methods to the slider.

  • Set up Auto Layout rules to govern the size and position of the slider in your interface.

Respond to user interaction

Sliders use the target-action design pattern to notify your app when the user moves the slider. To be notified when the sliders value changes, register your action method with the valueChanged event. At runtime, the slider calls your method in response to the user changing the sliders value.

By default, the slider sends value-changed events continuously as the user moves the sliders thumb control. Setting the isContinuous property to false causes the slider to send an event only when the user releases the sliders thumb control, setting the final value.

You connect a slider to your action method by using the addTarget(_:action:for:) method or by creating a connection in Interface Builder. The signature of an action method takes one of three forms, as shown in the following code. Choose the form that provides the information that you need to respond to the value change in the slider.

@IBAction func doSomething() @IBAction func doSomething(sender: UISlider) @IBAction func doSomething(sender: UISlider, forEvent event: UIEvent)

  • (IBAction)doSomething;
  • (IBAction)doSomething:(id)sender;
  • (IBAction)doSomething:(id)sender forEvent:(UIEvent*)event;

Debug sliders

When debugging issues with sliders, follow these tips to avoid common pitfalls:

  • Use either a custom tint color or a custom image, but not both. When customizing slider appearance with images or tint, use one option or the other, but not both. Conflicting settings for track and thumb appearance are resolved in favor of the most recently set value. For example, setting a new minimum track image for any state clears any custom tint color you may have provided for minimum track images. Similarly, setting the thumb tint color removes any custom thumb images associated with the slider.

  • The current value must be between the minimum and maximum values. If you try to programmatically set a sliders current value to be below the minimum or above the maximum, its set to the minimum or maximum instead. However, if you set the value beyond the range of the minimum or maximum in Interface Builder, the minimum or minimum values are updated instead.

  • Set custom images for all control states. If you use custom track and thumb images for your slider, remember to set an image for every possible UIControl.State. Any control state that doesnt have a corresponding custom image assigned to it displays the standard image instead. If you set one custom image, be sure to set them all.

Configure slider attributes in Interface Builder

The following table lists the core attributes that you configure for sliders in Interface Builder.

Attribute Description
Value Minimum / Maximum Specifies the values attached to the endpoints of the slider, the minimum representing the leading end of the slider and the maximum representing the trailing end. Access these values at runtime using the minimumValue and maximumValue properties.
Value Current Represents the initial value of the slider. The value must be between the minimum and maximum values. Access this value at runtime with the value property.

The following table lists the attributes that control the appearance of a slider.

Attribute Description
Min Image Specifies the image displayed at the leading end of the slider. If blank, no image is displayed. Access this value at runtime with the minimumValueImage property.
Max Image Specifies the image displayed at the trailing end of the slider. If blank, no image is displayed. Access this value at runtime with the maximumValueImage property.
Min Track Tint Specifies the tint color of the track to the leading side of the sliders thumb. The value defaults to the sliders inherited tint color. Access this value at runtime with the minimumTrackTintColor property.
Max Track Tint Specifies the tint color of the track to the trailing side of the sliders thumb. Access this value at runtime with the maximumTrackTintColor property.
Thumb Tint Controls the tint color of the sliders thumb. Access this value at runtime with the thumbTintColor property.

The following table lists the attributes that configure the events associated with a slider.

Attribute Description
Events: Continuous Updates Controls when attached actions are triggered: when checked, action events are called whenever the thumb is moved during user interaction. When not checked, attached actions are triggered only on completion of user interaction. Access this value at runtime with the isContinuous property.

For information about the sliderss inherited Interface Builder attributes, see UIControl and UIView.

Customize the sliders appearance

Use Auto Layout to specify the position and width of a slider. The intrinsic height is determined by the intrinsic heights of the minimum and maximum images, if present. The width of the track automatically adjusts to accommodate the minimum and maximum images.

The most common way to customize the sliders appearance is to provide custom minimum and maximum value images. These images sit at either end of the slider control and indicate which value that end of the slider represents. Set the values of the minimumValueImage and maximumValueImage properties to appropriate UIImage objects to display images at the ends of the slider. The following image shows a slider configured with minimum and maximum images that imply volume adjustment.

To set custom tint colors for both the track and the thumb of a slider, use the minimumTrackTintColor, maximumTrackTintColor, and thumbTintColor properties, as shown in the following image.

By default, the minimum track tint color defers to the tint color of the slider control.

To completely change the appearance of the slider, you can specify images for the thumb and the track. Provide images for each of the control states (normal, highlighted, and so on) with the setMinimumTrackImage(_:for:), setMaximumTrackImage(_:for:), and setThumbImage(_:for:) methods. Set the capInsets property for the track images to facilitate horizontal stretching. To access the images used in the current control state, use the currentMinimumTrackImage, currentMaximumTrackImage, and currentThumbImage properties, as shown in the following image.

Provide localized strings

Sliders have no special properties related to internationalization. However, if you use a slider with a label, make sure you provide localized strings for the label.

Sliders automatically adjust to the appropriate interface direction, ensuring that the minimum end of the slider is always at the leading end and the maximum end at the trailing end. If you override minimumValueImageRect(forBounds:) or maximumValueImageRect(forBounds:) in a subclass of UISlider, be sure to take the user interface layout direction into account.

For more information, see Internationalization and Localization Guide.

Make sliders accessible

Sliders are accessible by default. The default accessibility traits for a slider are User Interaction Enabled and Adjustable.

"Sound volume: 13 percent. Adjustable. Swipe up or down with one finger to adjust the value."

For more information about making iOS controls accessible, see the accessibility information in UIControl. For general information about making your interface accessible, see Accessibility Programming Guide for iOS.

Topics

Accessing the sliders value

var value: Float

The sliders current value.

func setValue(Float, animated: Bool)

Sets the sliders current value, allowing you to animate the change visually.

Accessing the sliders value limits

var minimumValue: Float

The minimum value of the slider.

var maximumValue: Float

The maximum value of the slider.

Modifying the sliders behavior

var isContinuous: Bool

A Boolean value indicating whether changes in the sliders value generate continuous update events.

var behavioralStyle: UIBehavioralStyle

The style that determines how the slider behaves.

var preferredBehavioralStyle: UIBehavioralStyle

The preferred behavioral style.

enum UIBehavioralStyle

Constants that indicate how a control behaves in apps built with Mac Catalyst.

Changing the sliders style

var sliderStyle: UISlider.Style Beta

enum Style Beta

Changing the sliders appearance

var minimumValueImage: UIImage?

The image that represents the sliders minimum value.

var maximumValueImage: UIImage?

The image representing the sliders maximum value.

var minimumTrackTintColor: UIColor?

The color used to tint the default minimum track images.

var currentMinimumTrackImage: UIImage?

The minimum track image currently being used to render the slider.

Returns the minimum track image associated with the specified control state.

func setMinimumTrackImage(UIImage?, for: UIControl.State)

Assigns a minimum track image to the specified control states.

var maximumTrackTintColor: UIColor?

The color used to tint the default maximum track images.

var currentMaximumTrackImage: UIImage?

Contains the maximum track image currently being used to render the slider.

Returns the maximum track image associated with the specified control state.

func setMaximumTrackImage(UIImage?, for: UIControl.State)

Assigns a maximum track image to the specified control states.

var thumbTintColor: UIColor?

The color used to tint the default thumb images.

var currentThumbImage: UIImage?

The thumb image currently being used to render the slider.

Returns the thumb image associated with the specified control state.

func setThumbImage(UIImage?, for: UIControl.State)

Assigns a thumb image to the specified control states.

Configuring the track

var trackConfiguration: UISlider.TrackConfiguration?

struct TrackConfiguration

Overrides for subclasses

Returns the drawing rectangle for the maximum value image.

Returns the drawing rectangle for the minimum value image.

Returns the drawing rectangle for the sliders track.

Returns the drawing rectangle for the sliders thumb image.

Relationships

Inherits From

  • UIControl

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Controls

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

class UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

class UIStepper

A control for incrementing or decrementing a value.

class UISwitch

A control that offers a binary choice, such as on/off.


https://developer.apple.com/documentation/uikit/uistepper

  • UIKit
  • UIStepper

Class

UIStepper

A control for incrementing or decrementing a value.

@MainActor class UIStepper

Mentioned in

Choosing a user interface idiom for your Mac app

Attaching gesture recognizers to UIKit controls

Overview

By default, pressing and holding a steppers button increments or decrements the steppers value repeatedly. The rate of change depends on how long the user continues pressing the control. To turn off this behavior, set the autorepeat property to false.

The maximum value must be greater than or equal to the minimum value. If you set a maximum or minimum value that would break this invariant, both values are set to the new value. For example, if the minimum value is 200 and you set a maximum value of 100, then both the minimum and maximum become 200.

Topics

Configuring the stepper

var isContinuous: Bool

A Boolean value that determines whether to send value changes during user interaction or after user interaction ends.

var autorepeat: Bool

A Boolean value that determines whether to repeatedly change the steppers value as the user presses and holds a stepper button.

var wraps: Bool

A Boolean value that determines whether the stepper can wrap its value to the minimum or maximum value when incrementing and decrementing the value.

var minimumValue: Double

The lowest possible numeric value for the stepper.

var maximumValue: Double

The highest possible numeric value for the stepper.

var stepValue: Double

The step, or increment, value for the stepper.

Accessing the steppers value

var value: Double

The numeric value of the stepper.

Customizing appearance

Returns the background image associated with the specified control state.

func setBackgroundImage(UIImage?, for: UIControl.State)

Sets the background image for the control when its in the specified state.

Returns the image used for the decrement glyph of the control.

func setDecrementImage(UIImage?, for: UIControl.State)

Sets the image to use for the decrement glyph of the control.

Returns the divider image for the given combination of left and right states.

func setDividerImage(UIImage?, forLeftSegmentState: UIControl.State, rightSegmentState: UIControl.State)

Sets the image to use for the given combination of left and right states.

Returns the image used for the increment glyph of the control.

func setIncrementImage(UIImage?, for: UIControl.State)

Sets the image to use for the increment glyph of the control.

Relationships

Inherits From

  • UIControl

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Controls

Responding to control-based events using target-action

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

class UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

class UISlider

A control for selecting a single value from a continuous range of values.

class UISwitch

A control that offers a binary choice, such as on/off.


https://developer.apple.com/documentation/uikit/uiswitch

  • UIKit
  • UISwitch

Class

UISwitch

A control that offers a binary choice, such as on/off.

@MainActor class UISwitch

Mentioned in

Attaching gesture recognizers to UIKit controls

Displaying a checkbox in your Mac app built with Mac Catalyst

Choosing a user interface idiom for your Mac app

Overview

The UISwitch class declares a property and a method to control its on/off state. When a person manipulates the switch control (“flips” it), it triggers the valueChanged event.

You can customize the appearance of the switch by changing the color used to tint the switch when its on or off.

For information about basic view behaviors, see View Programming Guide for iOS.

Topics

Creating a switch

init(frame: CGRect)

Creates a switch control.

init?(coder: NSCoder)

Creates a switch control from data in an unarchiver.

Setting the on/off state

var isOn: Bool

A Boolean value that determines whether the switch is in the on or off position.

func setOn(Bool, animated: Bool)

Sets the state of the switch to the on or off position, optionally animating the transition.

Setting the display style

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

var preferredStyle: UISwitch.Style

The preferred display style for the switch.

var style: UISwitch.Style

The display style for the switch.

enum Style

Styles that determine the appearance of the switch.

var title: String?

The title displayed next to a checkbox-style switch.

Customizing the appearance of the switch

var onTintColor: UIColor?

The color used to tint the appearance of the switch when its in the on position.

var thumbTintColor: UIColor?

The color used to tint the appearance of the thumb.

Deprecated

var onImage: UIImage?

The image displayed when the switch is in the on position.

var offImage: UIImage?

The image displayed when the switch is in the off position.

Relationships

Inherits From

  • UIControl

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Controls

Responding to control-based events using target-action

Handle user input by connecting buttons, sliders, and other controls to your apps code using the target-action design pattern.

class UIControl

The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions.

class UIButton

A control that executes your custom code in response to user interactions.

class UIColorWell

A control that displays a color picker.

class UIDatePicker

A control for inputting date and time values.

class UIPageControl

A control that displays a horizontal series of dots, each of which corresponds to a page in the apps document or other data-model entity.

class UISegmentedControl

A horizontal control that consists of multiple segments, each segment functioning as a discrete button.

class UISlider

A control for selecting a single value from a continuous range of values.

class UIStepper

A control for incrementing or decrementing a value.


https://developer.apple.com/documentation/uikit/uilabel


https://developer.apple.com/documentation/uikit/uitextfield

  • UIKit
  • UITextField

Class

UITextField

An object that displays an editable text area in your interface.

tvOS

@MainActor class UITextField

Mentioned in

Adding Writing Tools support to a custom UIKit view

Adding user-focusable elements to a tvOS app

Adopting system selection UI in custom text views

Customizing Writing Tools behavior for UIKit views

Overview

You use text fields to gather text-based input from the user using the onscreen keyboard. The keyboard is configurable for many different types of input such as plain text, emails, numbers, and so on. Text fields use the target-action mechanism and a delegate object to report changes made during the course of editing.

In addition to its basic text-editing behavior, you can add overlay views to a text field to display additional information and provide additional tappable controls. You might add custom overlay views for elements such as a bookmarks button or search icon. Text fields provide a built-in overlay view to clear the current text. The use of custom overlay views is optional.

After adding a text field to your interface, you configure it for use in your app. Configuration involves performing some or all of the following tasks:

  • Configure one or more targets and actions for the text field.

  • Configure the keyboard-related attributes of the text field.

  • Assign a delegate object to handle important tasks, such as:

  • Determining whether the user should be allowed to edit the text fields contents.

  • Validating the text entered by the user.

  • Responding to taps in the keyboards return button.

  • Forwarding the user-entered text to other parts of your app.

  • Store a reference to the text field in one of your controller objects.

For information about the methods of the text fields delegate object, see UITextFieldDelegate.

Show and hide the keyboard

When a text field becomes first responder, the system automatically shows the keyboard and binds its input to the text field. A text field becomes the first responder automatically when the user taps it. You can also force a text field to become the first responder by calling its becomeFirstResponder() method. You might force a text field to become first responder when you require the user to enter some information.

You can ask the system to dismiss the keyboard by calling the resignFirstResponder() method of your text field. Usually, you dismiss the keyboard in response to specific interactions. For example, you might dismiss the keyboard when the user taps the keyboards return key. The system can also dismiss the keyboard in response to user actions. Specifically, the system dismisses the keyboard when the user taps a new control that doesnt support keyboard input.

The appearance and dismissal of the keyboard affect the editing state of the text field. When the keyboard appears, the text field enters the editing state and sends the appropriate notifications to its delegate. Similarly, when the text field resigns the first responder status, it leaves the editing state and notifies its delegate. For more information about the sequence of events that occur during editing, see Validate text and manage the editing process.

Configure the keyboards appearance

You customize your text fields keyboard using the properties of the UITextInputTraits protocol, which the UITextField class adopts. UIKit supports standard keyboards for the users current language and also supports specialized keyboards for entering numbers, URLs, email addresses, and other specific types of information. You use the properties of this protocol to adjust keyboard traits such as the following:

  • The type of keyboard to display

  • The autocapitalization behavior of the keyboard

  • The autocorrection behavior of the keyboard

  • The type of return key to display

Because the system manages the showing and hiding of the keyboard in response to responder changes, it posts the following notifications for tracking the keyboard-related changes:

  • keyboardWillShowNotification

  • keyboardDidShowNotification

  • keyboardWillHideNotification

  • keyboardDidHideNotification

  • keyboardWillChangeFrameNotification

  • keyboardDidChangeFrameNotification

Each notification contains a userInfo dictionary that includes the size of the keyboard. Because the keyboard can hide portions of your interface, you should use the size information to reposition your content on the screen. For content embedded in a scroll view, you can scroll the text field into view, as illustrated in the following image. In other cases, you can resize your main content view so that it isnt covered by the keyboard.

For more information about managing keyboard interactions, see Text Programming Guide for iOS.

Format the text in a text field

There are two types of formatting you can do to a text fields text:

  • You can change the font, color, and style of the text using properties of this class. Alternatively, you can specify an NSAttributedString for the text fields content.

  • You can format the content of a text field using an Formatter object.

The font, textColor, and textAlignment properties, among others, affect the appearance of the text fields string. Modifying these properties applies the specified characteristic to the entire string. To specify more granular formatting, specify the text fields text using an NSAttributedString object.

The UITextField class doesnt provide built-in support for formatting its string using an Formatter object, but you can use the text fields delegate to format the content yourself. To do so, use the text fields delegate methods to validate text and to format it appropriately. For example, use the textField(_:shouldChangeCharactersIn:replacementString:) method to validate and format text while the user is typing. For information about how to use formatter objects, see Data Formatting Guide.

Use overlay views to edit content

Overlay views are small views displayed on the left and right sides of the text views editable area. Typically, overlay views are image-based buttons that you set up as additional editing controls. For example, you might use an overlay view to implement a bookmarks button. To configure a button as an overlay view, specify an image for the buttons content and configure the target and action of the button to respond to taps.

The following code shows how to add a button as the left overlay of a text field. In this case, the code creates a button and configure its size and contents. The leftViewMode property specifies when your button is displayed. When the user taps the button, the button calls the configured action method, which in this case is a custom displayBookmarks: method.

let overlayButton = UIButton(type: .custom) let bookmarkImage = UIImage(systemName: "bookmark") overlayButton.setImage(bookmarkImage, for: .normal) overlayButton.addTarget(self, action: #selector(displayBookmarks), for: .touchUpInside) overlayButton.sizeToFit()

// Assign the overlay button to the text field textField.leftView = overlayButton textField.leftViewMode = .always

UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage *bookmarkImage = [UIImage systemImageNamed:@"bookmark"]; [overlayButton setImage:bookmarkImage forState:UIControlStateNormal]; [overlayButton addTarget:self action:@selector(displayBookmarks)
forControlEvents:UIControlEventTouchUpInside]; [overlayButton sizeToFit];

// Assign the overlay button to the text field self.textField.leftView = overlayButton; self.textField.leftViewMode = UITextFieldViewModeAlways;

When configuring overlay views, consider whether you want your text field to display the built-in clear button. The clear button provides the user with a convenient way to delete all of the text fields text. This button is displayed in the right overlay position, but if you provide a custom right overlay view, use the rightViewMode and clearButtonMode properties to define when your custom overlay should be displayed and when the clear button should be displayed.

Validate text and manage the editing process

A text field manages the editing of its text with the help of its delegate object. As the user interacts with a text field, the text field notifies its delegate and gives it a chance to control what is happening. You can use the delegate methods to prevent the user from starting or stopping the editing process or to validate text as its typed. You can also use the delegate methods to perform related tasks, such as updating other parts of your interface based on the information typed by the user.

For more information about using the text fields delegate to manage editing interactions, see UITextFieldDelegate.

Interface Builder attributes

The following table lists the attributes that you configure for text fields in Interface Builder.

Attribute Description
Text The initial text displayed by the text field. You can specify the text as a plain string or as an attributed string. If you specify an attributed string, Interface Builder provides different options for editing the font, color, and formatting of the string.
Color The color of the text fields text. To set this attribute programmatically, use the textColor property.
Font The font of the text fields text. To set this attribute programmatically, use the font property.
Alignment The alignment of the text fields text inside the editing area. This option is available only when formatting plain strings. To set this attribute programmatically, use the textAlignment property.
Placeholder The placeholder text displayed by the text field. When the text fields string is empty, the text field displays this string instead, formatting the string so as to indicate that it isnt the actual text. Typing any text into the text field hides this string. To set this attribute programmatically, use the placeholder property.
Background The background image to display when the text field is enabled. This image is displayed behind the rest of the text fields content. To set this attribute programmatically, use the background property.
Disabled The background image to display when the text field is disabled. This image is displayed behind the rest of the text fields content. To set this attribute programmatically, use the disabledBackground property.
Border Style The visual style for the text fields border. This attribute defines the visual border, if any, drawn around the editable text region. To set this attribute programmatically, use the borderStyle property.
Clear Button The behavior of the clear button. The clear button is a built-in overlay view that the user taps to delete all of the text in a text field. Use this attribute to define when the clear button appears. To set this attribute programmatically, use the clearButtonMode property.
Min Font Size The minimum font size for the text fields text. When the Adjust to Fit option is enabled, the text field automatically varies the font size to ensure maximum legibility of the text. You can use this attribute to specify the smallest font size that your consider appropriate for your text. To set this attribute programmatically, use the minimumFontSize property.

The following table lists the keyboard-related attributes that you configure for text fields. This attributes correspond to properties of the UITextInputTraits protocol that the UITextField class adopts.

Attribute Description
Capitalization The automatic capitalization style to apply to typed text. This attribute determines at what time the Shift key is automatically pressed. You can access the value of this attribute programmatically using the text fields autocapitalizationType property.
Correction The autocorrection behavior of the text field. This attribute determines whether autocorrection is enabled or disabled during typing. You can access the value of this attribute programmatically using the text fields autocorrectionType property.
Spell Checking The spell checking behavior of the text field. This attribute determines whether spell checking is enabled or disabled during typing. You can access the value of this attribute programmatically using the text fields spellCheckingType property.
Keyboard Type The style of the text fields keyboard. This property specifies the type of keyboard displayed when the text field is active. You can access the value of this attribute programmatically using the text fields keyboardType property.
Appearance The visual style applied to the text fields keyboard. Use this property to specify a dark or light keyboard. You can access the value of this attribute programmatically using the text fields keyboardAppearance property.
Return Key The type of return key to display on the keyboard. Use this property to configure the text and visual style applied to the keyboards return key. You can access the value of this attribute programmatically using the text fields returnKeyType property. The return key is disabled by default and becomes enabled only when the user types some text into the text field. To respond to taps in the Return key, implement the textFieldShouldReturn(_:) method in the delegate you assign to the text field.

For information about additional attributes you can configure for a text view, see UIControl.

Internationalization

The default language of the device affects the keyboard that pops up with the text field (including the return key). You dont need to do anything to enable this functionality; its enabled by default. However, your text field should be able to handle input that comes from any language.

When using storyboards to build your interface, use Xcodes base internationalization feature to configure the localizations your project supports. When you add a localization, Xcode creates a strings file for that localization. When configuring your interface programmatically, use the systems built-in support for loading localized strings and resources. For more information about internationalizing your interface, see Localization.

Accessibility

Text fields are accessible by default. The default accessibility trait for a text field is User Interaction Enabled.

For more information about making iOS controls accessible, see the accessibility information in UIControl. For general information about making your interface accessible, see Accessibility for UIKit.

State preservation

When you assign a value to a text fields restorationIdentifier property, it preserves the selected range of text, if any. During the next launch cycle, the text field attempts to restore that selection. If the selection range cant be applied to the current text, no selection is made. For more information about how state preservation and restoration works, see App Programming Guide for iOS.

For design guidance, see Human Interface Guidelines.

Topics

Validating and handling edits

var delegate: (any UITextFieldDelegate)?

The text fields delegate.

protocol UITextFieldDelegate

A set of optional methods to manage editing and validating text in a text field object.

Configuring the text attributes

var text: String?

The text that the text field displays.

var attributedText: NSAttributedString?

The styled text that the text field displays.

var placeholder: String?

The string that displays when there is no other text in the text field.

var attributedPlaceholder: NSAttributedString?

The styled string that displays when there is no other text in the text field.

var defaultTextAttributes: [NSAttributedString.Key : Any]

The default attributes to apply to the text.

var font: UIFont?

The font of the text.

var textColor: UIColor?

The color of the text.

var textAlignment: NSTextAlignment

The technique for aligning the text.

var typingAttributes: [NSAttributedString.Key : Any]?

The attributes to apply to new text that the user enters.

enum BorderStyle

The type of border around the text field.

Sizing the text fields text

var adjustsFontSizeToFitWidth: Bool

A Boolean value that indicates whether to reduce the font size to fit the text string into the text fields bounding rectangle.

var minimumFontSize: CGFloat

The size of the smallest permissible font when drawing the text fields text.

var sizingRule: UILetterformAwareSizingRule

The typographic bounds-sizing behavior that handles text with fonts that contain oversize characters.

Required

Managing the editing behavior

var isEditing: Bool

A Boolean value that indicates whether the text field is currently in edit mode.

var clearsOnBeginEditing: Bool

A Boolean value that determines whether the text field removes old text when editing begins.

var clearsOnInsertion: Bool

A Boolean value that determines whether inserting text replaces the previous contents.

var allowsEditingTextAttributes: Bool

A Boolean value that determines whether the user can edit the attributes of the text in the text field.

enum DidEndEditingReason

Constants that indicate the reason for ending editing in a text field.

class let didEndEditingReasonUserInfoKey: String

A key that indicates the reason for ending editing in a text field.

class let textDidBeginEditingNotification: NSNotification.Name

A notification that alerts observers when an editing session begins in a text field.

class let textDidChangeNotification: NSNotification.Name

A notification that alerts observers when the text in a text field changes.

class let textDidEndEditingNotification: NSNotification.Name

A notification that alerts observers when the editing session ends for a text field.

Setting the views background appearance

var borderStyle: UITextField.BorderStyle

The border style for the text field.

var background: UIImage?

The image that represents the background appearance of the text field when it is in an enabled state.

var disabledBackground: UIImage?

The image that represents the background appearance of the text field when it is in a disabled state.

Managing overlay views

var clearButtonMode: UITextField.ViewMode

A mode that controls when the standard Clear button appears in the text field.

var leftView: UIView?

The overlay view that displays on the left (or leading) side of the text field.

var leftViewMode: UITextField.ViewMode

A mode that controls when the left overlay view appears in the text field.

var rightView: UIView?

The overlay view that displays on the right (or trailing) side of the text field.

var rightViewMode: UITextField.ViewMode

A mode that controls when the right overlay view appears in the text field.

enum ViewMode

Constants that define when overlay views appear in a text field.

Drawing and positioning overrides

Returns the drawing rectangle for the text fields text.

func drawText(in: CGRect)

Draws the text fields text in the specified rectangle.

Deprecated

Returns the drawing rectangle for the text fields placeholder text.

func drawPlaceholder(in: CGRect)

Draws the text fields placeholder text in the specified rectangle.

Returns the text fields border rectangle.

Returns the rectangle for displaying editable text.

Returns the drawing rectangle for the built-in Clear button.

Returns the drawing rectangle of the text fields left overlay view.

Returns the drawing location of the text fields right overlay view.

Replacing the system input views

var inputView: UIView?

The custom input view to display when the text field becomes the first responder.

var inputAccessoryView: UIView?

The custom accessory view to display when the text field becomes the first responder.

Supporting state restoration

var interactionState: Any

Structures

struct TextDidBeginEditingMessage Beta

struct TextDidChangeMessage Beta

struct TextDidEndEditingMessage Beta

Relationships

Inherits From

  • UIControl

Inherited By

  • UISearchTextField

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContentSizeCategoryAdjusting
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UIKeyInput
  • UILargeContentViewerItem
  • UILetterformAwareAdjusting
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITextDraggable
  • UITextDroppable
  • UITextInput
  • UITextInputTraits
  • UITextPasteConfigurationSupporting
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Text views

class UILabel

A view that displays one or more lines of informational text.

class UITextView

A scrollable, multiline text region.

Extend the standard drag and drop support for text views to include custom types of content.


https://developer.apple.com/documentation/uikit/uitextview

  • UIKit
  • UITextView

Class

UITextView

A scrollable, multiline text region.

tvOS

@MainActor class UITextView

Mentioned in

Customizing Writing Tools behavior for UIKit views

Adding Writing Tools support to a custom UIKit view

Making a view into a drop destination

Making a view into a drag source

Adopting system selection UI in custom text views

Overview

UITextView supports the display of text using custom style information and also supports text editing. You typically use a text view to display multiple lines of text, such as when displaying the body of a large text document.

This class supports multiple text styles through use of the attributedText property. (Styled text isnt supported in versions of iOS earlier than iOS 6.) Setting a value for this property causes the text view to use the style information provided in the attributed string. You can still use the font, textColor, and textAlignment properties to set style attributes, but those properties apply to all of the text in the text view. Its recommended that you use a text view—and not a UIWebView object—to display both plain and rich text in your app.

Manage the keyboard

When the user taps in an editable text view, that text view becomes the first responder and automatically asks the system to display the associated keyboard. Because the appearance of the keyboard has the potential to obscure portions of your user interface, its up to you to make sure that doesnt happen by repositioning any views that might be obscured. Some system views, like table views, help you by scrolling the first responder into view automatically. If the first responder is at the bottom of the scrolling region, however, you may still need to resize or reposition the scroll view itself to ensure the first responder is visible.

Its your applications responsibility to dismiss the keyboard at the time of your choosing. You might dismiss the keyboard in response to a specific user action, such as the user tapping a particular button in your user interface. To dismiss the keyboard, send the resignFirstResponder() message to the text view thats currently the first responder. Doing so causes the text view object to end the current editing session (with the delegate objects consent) and hide the keyboard.

The appearance of the keyboard itself can be customized using the properties provided by the UITextInputTraits protocol. Text view objects implement this protocol and support the properties it defines. You can use these properties to specify the type of keyboard (ASCII, Numbers, URL, Email, and others) to display. You can also configure the basic text entry behavior of the keyboard, such as whether it supports automatic capitalization and correction of the text.

Keyboard notifications

When the system shows or hides the keyboard, it posts several keyboard notifications. These notifications contain information about the keyboard, including its size, which you can use for calculations that involve repositioning or resizing views. Registering for these notifications is the only way to get some types of information about the keyboard. The system delivers the following notifications for keyboard-related events:

  • keyboardWillShowNotification

  • keyboardDidShowNotification

  • keyboardWillHideNotification

  • keyboardDidHideNotification

For more information about these notifications, see their descriptions in UIWindow.

State preservation

In iOS 6 and later, if you assign a value to this views restorationIdentifier property, it preserves the following information:

  • The selected range of text, as reported by the selectedRange property.

  • The editing state of the text view, as reported by the isEditable property.

During the next launch cycle, the view attempts to restore these properties to their saved values. If the selection range cant be applied to the text in the restored view, no text is selected. For more information about how state preservation and restoration works, see App Programming Guide for iOS.

For design guidance, see Human Interface Guidelines.

Topics

Initializing the text view

init(frame: CGRect, textContainer: NSTextContainer?)

Creates a new text view with the specified text container.

convenience init(usingTextLayoutManager: Bool)

Creates a new text view, with or without a text layout manager depending on the Boolean value you specify.

init?(coder: NSCoder)

Creates a text view from data in an unarchiver.

Specifying the text content

var text: String!

The text that the text view displays.

var attributedText: NSAttributedString!

The styled text that the text view displays.

Responding to text view changes

var delegate: (any UITextViewDelegate)?

The text views delegate.

protocol UITextViewDelegate

The methods for receiving editing-related messages for text view objects.

Configuring appearance attributes

var font: UIFont?

The font of the text.

var textColor: UIColor?

The color of the text.

var textAlignment: NSTextAlignment

The technique for aligning the text.

var typingAttributes: [NSAttributedString.Key : Any]

The attributes to apply to new text that the user enters.

var linkTextAttributes: [NSAttributedString.Key : Any]!

The attributes to apply to links.

var borderStyle: UITextView.BorderStyle

var textHighlightAttributes: [NSAttributedString.Key : Any]!

func drawTextHighlightBackground(for: NSTextRange, origin: CGPoint)

enum BorderStyle

Configuring layout attributes

var textContainerInset: UIEdgeInsets

The inset of the text containers layout area within the text views content area.

var usesStandardTextScaling: Bool

A Boolean value that determines the rendering scale of the text.

var sizingRule: UILetterformAwareSizingRule

The typographic bounds-sizing behavior that handles text with fonts that contain oversize characters.

Required

Formatting special data in text

var dataDetectorTypes: UIDataDetectorTypes

The types of data that convert to tappable URLs in the text view.

struct UIDataDetectorTypes

Constants that define the types of information to detect in text-based content.

Managing the editing behavior

var isEditable: Bool

A Boolean value that indicates whether the text view is editable.

var allowsEditingTextAttributes: Bool

A Boolean value that indicates whether the text view allows the user to edit style information.

class let textDidBeginEditingNotification: NSNotification.Name

A notification that alerts observers when an editing session begins in a text view.

class let textDidChangeNotification: NSNotification.Name

A notification that alerts observers when the text in a text view changes.

class let textDidEndEditingNotification: NSNotification.Name

A notification that alerts observers when the editing session ends for a text view.

Working with the selection

var selectedRange: NSRange

The current selection range of the text view.

func scrollRangeToVisible(NSRange)

Scrolls the text view until the text in the specified range is visible.

var clearsOnInsertion: Bool

A Boolean value that indicates whether inserting text replaces the previous contents.

var isSelectable: Bool

A Boolean value that indicates whether the text view is selectable.

Replacing the system input views

var inputView: UIView?

The custom input view to display when the text view becomes the first responder.

var inputAccessoryView: UIView?

The custom accessory view to display when the text view becomes the first responder.

Supporting Find and Replace

var isFindInteractionEnabled: Bool

A Boolean value that enables a text views built-in find interaction.

var findInteraction: UIFindInteraction?

The text views built-in find interaction.

Getting the writing tools status

var isWritingToolsActive: Bool

A Boolean value that indicates whether the writing tools are currently interacting with the text views content.

Accessing TextKit Objects

var textLayoutManager: NSTextLayoutManager?

The text layout manager that lays out text for the text views text container.

var layoutManager: NSLayoutManager

The layout manager that lays out text for the text views text container.

var textContainer: NSTextContainer

The text container object that defines the area where text displays in the text view.

var textStorage: NSTextStorage

The text storage object holding the text that displays in the text view.

Supporting state restoration

var interactionState: Any

Structures

struct TextDidBeginEditingMessage Beta

struct TextDidChangeMessage Beta

struct TextDidEndEditingMessage Beta

Instance Properties

var allowedWritingToolsResultOptions: UIWritingToolsResultOptions

var selectedRanges: [NSRange] Beta

var subclassForWritingToolsCoordinator: AnyClass

var textFormattingConfiguration: UITextFormattingViewController.Configuration?

var writingToolsBehavior: UIWritingToolsBehavior

var writingToolsCoordinator: UIWritingToolsCoordinator

Relationships

Inherits From

  • UIScrollView

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContentSizeCategoryAdjusting
  • UICoordinateSpace
  • UIDynamicItem
  • UIFindInteractionDelegate
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UIFocusItemScrollableContainer
  • UIKeyInput
  • UILargeContentViewerItem
  • UILetterformAwareAdjusting
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITextDraggable
  • UITextDroppable
  • UITextInput
  • UITextInputTraits
  • UITextPasteConfigurationSupporting
  • UITextSearching
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Text views

class UILabel

A view that displays one or more lines of informational text.

class UITextField

An object that displays an editable text area in your interface.

Extend the standard drag and drop support for text views to include custom types of content.


https://developer.apple.com/documentation/uikit/drag-and-drop-customization


https://developer.apple.com/documentation/uikit/uisearchtextfield

  • UIKit
  • UISearchTextField

Class

UISearchTextField

A view for displaying and editing text and search tokens.

@MainActor class UISearchTextField

Overview

Use a search text field to display search criteria represented as text and tokens, and allow the user to edit that criteria. Tokens are discrete representations of nontextual content that your app can create and use to represent filters that limit the search results. Tokens always occur contiguously before any text in the search field.

UISearchBar hosts a search text field, but you may also use a search text field in other roles, such as the title view of a UINavigationItem.

Tokens can be programmatically selected by including their position in a range assigned to the selectedTextRange property.

Topics

Converting text into tokens

func replaceTextualPortion(of: UITextRange, with: UISearchToken, at: Int)

Converts text in a search field into a search token.

var textualRange: UITextRange

The range of the fields text content.

Supporting token interactions

var allowsDeletingTokens: Bool

A Boolean that indicates whether the user can remove tokens from the search field.

var allowsCopyingTokens: Bool

A Boolean that indicates whether the user can copy or drag tokens from the search field.

var delegate: (any UITextFieldDelegate)?

The text fields delegate.

protocol UISearchTextFieldDelegate

The interface for the delegate of a search field.

protocol UISearchTextFieldPasteItem

A protocol that supports pasting tokens.

Adding and removing tokens

var tokens: [UISearchToken]

The collection of tokens in the search text field.

func insertToken(UISearchToken, at: Int)

Adds a search token at a specific index.

func removeToken(at: Int)

Removes a particular search token from the search text field.

Customizing token behavior

var tokenBackgroundColor: UIColor!

The background color for all tokens in the search text field.

Returns the search fields tokens that are within a given range.

Converts a token index into a text position.

Providing search suggestions

var searchSuggestions: [any UISearchSuggestion]?

A list of suggestions to offer as shortcuts below the search field.

Relationships

Inherits From

  • UITextField

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContentSizeCategoryAdjusting
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UIKeyInput
  • UILargeContentViewerItem
  • UILetterformAwareAdjusting
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITextDraggable
  • UITextDroppable
  • UITextInput
  • UITextInputTraits
  • UITextPasteConfigurationSupporting
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Search field

class UISearchToken

Search criteria in a search text field, represented by text and an optional icon.


https://developer.apple.com/documentation/uikit/uisearchtoken

  • UIKit
  • UISearchToken

Class

UISearchToken

Search criteria in a search text field, represented by text and an optional icon.

@MainActor class UISearchToken

Overview

Use search tokens to help users understand and edit complex search queries in a UISearchTextField. A token acts like a single character in standard text interactions such as deleting, selecting, or dragging. A search token should always have text and may also have an icon.

Assign a representedObject to each search token thats meaningful to your app. By attaching this extra data to the token you can reconstruct the full search query using information available in the search field when, for example, your app starts from state restoration or the user starts a search.

See Using suggested searches with a search controller to learn how to use search tokens.

Topics

Creating a search token

init(icon: UIImage?, text: String)

Creates a search token with the specified text and icon (if any).

var representedObject: Any?

The object represented by the search token.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Search field

class UISearchTextField

A view for displaying and editing text and search tokens.

protocol UISearchTextFieldDelegate

The interface for the delegate of a search field.


https://developer.apple.com/documentation/uikit/uisearchtextfielddelegate


https://developer.apple.com/documentation/uikit/uivisualeffect

  • UIKit
  • UIVisualEffect

Class

UIVisualEffect

An initializer for visual effect views and blur and vibrancy effect objects.

tvOS

@MainActor class UIVisualEffect

Relationships

Inherits From

  • NSObject

Inherited By

  • UIBlurEffect
  • UIGlassContainerEffect
  • UIGlassEffect
  • UIVibrancyEffect

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable

See Also

Visual effects

class UIVisualEffectView

An object that implements some complex visual effects.

class UIVibrancyEffect

An object that amplifies and adjusts the color of the content layered behind a visual effect view.

class UIBlurEffect

An object that applies a blurring effect to the content layered behind a visual effect view.


https://developer.apple.com/documentation/uikit/uivisualeffectview

  • UIKit
  • UIVisualEffectView

Class

UIVisualEffectView

An object that implements some complex visual effects.

tvOS

@MainActor class UIVisualEffectView

Overview

Depending on the desired effect, the effect may affect content layered behind the view or content added to the visual effect views contentView. Apply a visual effect view to an existing view and then apply a UIBlurEffect or UIVibrancyEffect object to apply a blur or vibrancy effect to the existing view. After you add the visual effect view to the view hierarchy, add any subviews to the contentView property of the visual effect view. Dont add subviews directly to the visual effect view itself.

Set the correct alpha value

When using the UIVisualEffectView class, avoid alpha values that are less than 1. Creating views that are partially transparent causes the system to combine the view and all the associated subviews during an offscreen render pass. UIVisualEffectView objects need to be combined as part of the content theyre layered on top of in order to look correct. Setting the alpha to less than 1 on the visual effect view or any of its superviews causes many effects to look incorrect or not show up at all.

Use masks with a visual effect view

Masks directly applied to a UIVisualEffectView are forwarded to the internal views that provide the visual effect, including the contentView itself. You can also apply masks directly to the contentView. Applying a mask to a superview of a UIVisualEffectView object causes the effect to fail, and an exception is thrown.

Any mask provided to UIVisualEffectView isnt the view that actually performs the mask. UIKit makes a copy of the view and applies it to each subview. To reflect a size change to the mask, you must apply the change to the original mask and reset it on the effect view.

Capture a snapshot of a visual effect view

Many effects require support from the window that hosts the UIVisualEffectView. Attempting to take a snapshot of only the UIVisualEffectView results in a snapshot that doesnt contain the effect. To take a snapshot of a view hierarchy that contains a UIVisualEffectView, you must take a snapshot of the entire UIWindow or UIScreen that contains it.

Topics

Creating a visual effect view

init(effect: UIVisualEffect?)

Creates a new visual effect view with the designated visual effect.

init?(coder: NSCoder)

Creates a visual effect view from data in an unarchiver.

Retrieving view information

var contentView: UIView

A view object that can have a visual effect view added to it.

var effect: UIVisualEffect?

The visual effect provided by the view.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSSecureCoding
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Visual effects

class UIVisualEffect

An initializer for visual effect views and blur and vibrancy effect objects.

class UIVibrancyEffect

An object that amplifies and adjusts the color of the content layered behind a visual effect view.

class UIBlurEffect

An object that applies a blurring effect to the content layered behind a visual effect view.


https://developer.apple.com/documentation/uikit/uivibrancyeffect

  • UIKit
  • UIVibrancyEffect

Class

UIVibrancyEffect

An object that amplifies and adjusts the color of the content layered behind a visual effect view.

@MainActor class UIVibrancyEffect

Overview

A vibrancy effect is intended to be used as a subview of or layered on top of a UIVisualEffectView that has been configured with a UIBlurEffect. The use of a vibrancy effect can help the content placed inside the contentView become more vivid.

The vibrancy effect is color-dependent. Any subviews that you add to the contentView must implement the tintColorDidChange() method and update themselves accordingly. UIImageView objects with images that have a rendering mode of UIImage.RenderingMode.alwaysTemplate as well as UILabel objects update automatically.

Topics

Creating a vibrancy effect

init(forBlurEffect: UIBlurEffect, style: UIVibrancyEffectStyle)

Creates a vibrancy effect with the specified blur and style values.

init(blurEffect: UIBlurEffect)

Creates a vibrancy effect for a specific blur effect.

enum UIVibrancyEffectStyle

Constants for the vibrancy styles.

Deprecated

Creates a vibrancy effect suitable for use with certain supporting text and template images within a widget.

Deprecated

Creates a vibrancy effect suitable for indicating the secondary importance or relevance of supporting text and template images within a widget.

Creates a vibrancy effect for the specified style.

Creates a vibrancy effect for use in Notification Center.

Relationships

Inherits From

  • UIVisualEffect

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype

See Also

Visual effects

class UIVisualEffect

An initializer for visual effect views and blur and vibrancy effect objects.

class UIVisualEffectView

An object that implements some complex visual effects.

class UIBlurEffect

An object that applies a blurring effect to the content layered behind a visual effect view.


https://developer.apple.com/documentation/uikit/uiblureffect

  • UIKit
  • UIBlurEffect

Class

UIBlurEffect

An object that applies a blurring effect to the content layered behind a visual effect view.

tvOS

@MainActor class UIBlurEffect

Overview

Views that you add to the contentView of a visual effect view arent affected by the blur effect.

Topics

Creating a blur effect

init(style: UIBlurEffect.Style)

Creates a blur effect with the designated style.

Constants

enum Style

Blur styles available for blur effect objects.

Relationships

Inherits From

  • UIVisualEffect

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype

See Also

Visual effects

class UIVisualEffect

An initializer for visual effect views and blur and vibrancy effect objects.

class UIVisualEffectView

An object that implements some complex visual effects.

class UIVibrancyEffect

An object that amplifies and adjusts the color of the content layered behind a visual effect view.


https://developer.apple.com/documentation/uikit/uibaritem


https://developer.apple.com/documentation/uikit/uibarbuttonitem

  • UIKit
  • UIBarButtonItem

Class

UIBarButtonItem

A specialized button for placement on a toolbar, navigation bar, or shortcuts bar.

tvOS

@MainActor class UIBarButtonItem

Overview

You typically use Interface Builder to create and configure bar button items. However, you can customize the appearance of buttons by sending the setter messages to UIBarButtonItemAppearance to customize all buttons, or to a specific UIBarButtonItem instance. You can use customized buttons in standard places in a UINavigationItem object or a UIToolbar instance.

In general, specify a value for the normal state so that other states without a custom value set can use it. Similarly, when a property depends on the bar metrics (for instance, on the iPhone in landscape orientation, bars have a different height from the standard), specify a value of UIBarMetrics.default.

Topics

Creating items

convenience init(title: String?, image: UIImage?, primaryAction: UIAction?, menu: UIMenu?)

Creates a plain-style item using the specified title, image, primary action, and context menu.

convenience init(title: String?, image: UIImage?, target: AnyObject?, action: Selector?, menu: UIMenu?)

Creates a plain-style item using the specified title, image, target, action, and context menu.

init()

Initializes the item to its default state.

init?(coder: NSCoder)

Creates an item from data in an unarchiver.

Creating items of a specific style

convenience init(title: String?, style: UIBarButtonItem.Style, target: Any?, action: Selector?)

Creates an item using the specified title, style, target, and action.

convenience init(image: UIImage?, style: UIBarButtonItem.Style, target: Any?, action: Selector?)

Creates an item using the specified image, style, target, and action.

convenience init(image: UIImage?, landscapeImagePhone: UIImage?, style: UIBarButtonItem.Style, target: Any?, action: Selector?)

Creates an item using the specified images, style, target, and action.

Creating system items

convenience init(systemItem: UIBarButtonItem.SystemItem, primaryAction: UIAction?, menu: UIMenu?)

Creates an item using the specified system item, primary action, and context menu.

convenience init(barButtonSystemItem: UIBarButtonItem.SystemItem, target: Any?, action: Selector?)

Creates an item using the specified system item, target, and action.

enum SystemItem

Constants that define system-supplied images for bar button items.

Creating custom items

convenience init(customView: UIView)

Creates an item using the specified custom view.

Creating space items

Creates a new fixed-width space item.

Creates a new fixed space item of zero width.

Beta

Creates a new flexible-width space item.

Creating groups

Places the item in an optional group that a person can move, add to, or remove from the navigation bar during layout customization.

Places the item in a fixed group that a person cant move or remove from the navigation bar during layout customization.

Places the item in a movable group that a person can move but cant remove from the navigation bar during layout customization.

Managing the custom view

var customView: UIView?

A custom view representing the item.

Managing the action

var primaryAction: UIAction?

The action associated with the item.

var changesSelectionAsPrimaryAction: Bool

A Boolean value that indicates whether the button represents an action or selection.

var action: Selector?

The selector defining the action message to send to the target object when the user taps this bar button item.

var target: AnyObject?

The object that receives an action when the user selects the item.

Managing the context menu

var menu: UIMenu?

The context menu for this button.

var preferredMenuElementOrder: UIContextMenuConfiguration.ElementOrder

The preferred menu-element ordering strategy for the menu.

Customizing item appearance

var style: UIBarButtonItem.Style

The style of the item.

enum Style

Constants that specify the style of an item.

var tintColor: UIColor?

The tint color to apply to the button item.

var isHidden: Bool

A Boolean that determines the visibility of the item.

var isSelected: Bool

A Boolean value that indicates whether the button is in a selected state.

var width: CGFloat

The width of the item.

The set of possible titles to display on the bar button.

Customizing the Back button

Returns the back button background image for a specified control state and bar metrics.

func setBackButtonBackgroundImage(UIImage?, for: UIControl.State, barMetrics: UIBarMetrics)

Sets the back button background image for a specified control state and bar metrics.

Returns the back button title offset for specified bar metrics.

func setBackButtonTitlePositionAdjustment(UIOffset, for: UIBarMetrics)

Sets the back button title offset for specified bar metrics.

Returns the back button vertical position offset for specified bar metrics.

func setBackButtonBackgroundVerticalPositionAdjustment(CGFloat, for: UIBarMetrics)

Sets the back button vertical position offset for specified bar metrics.

Customizing the background

Returns the background vertical position offset for specified bar metrics.

func setBackgroundVerticalPositionAdjustment(CGFloat, for: UIBarMetrics)

Sets the background vertical position offset for specified bar metrics.

Returns the background image for a specified state and bar metrics.

func setBackgroundImage(UIImage?, for: UIControl.State, barMetrics: UIBarMetrics)

Sets the background image for a specified state and bar metrics.

Returns the background image for the specified state, style, and metrics.

func setBackgroundImage(UIImage?, for: UIControl.State, style: UIBarButtonItem.Style, barMetrics: UIBarMetrics)

Sets the background image for the specified state, style, and metrics.

Customizing the title placement

Returns the title offset for specified bar metrics.

func setTitlePositionAdjustment(UIOffset, for: UIBarMetrics)

Sets the title offset for specified bar metrics.

Configuring symbol effects

var isSymbolAnimationEnabled: Bool

A Boolean value that indicates whether symbol effects animate.

func addSymbolEffect(some IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool)

Adds an indefinite symbol effect to the bar button item with the specified options and animation.

func addSymbolEffect(some DiscreteSymbolEffect & IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool)

Adds a discrete, indefinite symbol effect to the bar button item with the specified options and animation.

func addSymbolEffect(some DiscreteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool)

Adds a discrete symbol effect to the bar button item with the specified options and animation.

func setSymbolImage(UIImage, contentTransition: some ContentTransitionSymbolEffect & SymbolEffect, options: SymbolEffectOptions)

Sets a symbol image using the specified content-transition effect and options.

func removeSymbolEffect(ofType: some IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool)

Removes the symbol effect that matches the specified indefinite effect type, using the specified options and animation setting.

func removeSymbolEffect(ofType: some DiscreteSymbolEffect & IndefiniteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool)

Removes the symbol effect that matches the specified discrete, indefinite effect type, using the specified options and animation setting.

func removeSymbolEffect(ofType: some DiscreteSymbolEffect & SymbolEffect, options: SymbolEffectOptions, animated: Bool)

Removes the symbol effect that matches the specified discrete effect type, using the specified options and animation setting.

func removeAllSymbolEffects(options: SymbolEffectOptions, animated: Bool)

Removes all symbol effects from the bar button item, using the specified options and animation setting.

Getting the group

var buttonGroup: UIBarButtonItemGroup?

The group that the button belongs to.

Representing the item in a menu

var menuRepresentation: UIMenuElement?

A menu element that represents the item when it appears in a menu.

Adding a badge

var badge: UIBarButtonItem.Badge?

struct Badge

Customizing placement in a toolbar

var hidesSharedBackground: Bool

A boolean value indicating whether the background this item may share with other items in the bar should be hidden.

var sharesBackground: Bool

A boolean value indicating whether this bar button item can share a background with other items in a navigation bar or a toolbar.

Relationships

Inherits From

  • UIBarItem

Conforms To

  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIAppearance
  • UIPopoverPresentationControllerSourceItem
  • UISpringLoadedInteractionSupporting

See Also

Bars

class UIBarItem

An abstract superclass for items that you can add to a bar that appears at the bottom of the screen.

class UIBarButtonItemGroup

A group of one or more bar button items for placement on a navigation bar or shortcuts bar.

class UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

class UISearchBar

A specialized view for receiving search-related information from the user.

class UIToolbar

A control that displays one or more buttons along the bottom edge of your interface.

class UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

class UITabBarItem

An object that describes an item in a tab bar.

protocol UIBarPositioning

A set of methods for defining the positioning of bars in iOS apps.

protocol UIBarPositioningDelegate

A set of methods that support the positioning of a bar that conforms to the UIBarPositioning protocol.


https://developer.apple.com/documentation/uikit/uibarbuttonitemgroup


https://developer.apple.com/documentation/uikit/uinavigationbar

  • UIKit
  • UINavigationBar

Class

UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

tvOS

@MainActor class UINavigationBar

Mentioned in

Building a desktop-class iPad app

Overview

A UINavigationBar object is a bar, typically displayed at the top of the window, containing buttons for navigating within a hierarchy of screens. The primary components are a left (back) button, a center title, and an optional right button. You can use a navigation bar as a standalone object or in conjunction with a navigation controller object.

A navigation bar is most commonly used within a navigation controller. The UINavigationController object creates, displays, and manages its associated navigation bar, and uses attributes of the view controllers you add to control the content displayed in the navigation bar.

To control a navigation bar when using a navigation controller, the following steps are required:

  • Create a navigation controller in Interface Builder or in the code.

  • Configure the appearance of the navigation bar using the navigationBar property on the UINavigationController object.

  • Control the content of the navigation bar by setting the title and navigationItem properties on each UIViewController you push onto the navigation controllers stack.

You can also use a standalone navigation bar, without using a navigation controller. To add a navigation bar to your interface, the following steps are required:

  • Set up Auto Layout rules to govern the position of the navigation bar in your interface.

  • Create a root navigation item to supply the initial title.

  • Configure a delegate object to handle user interactions with the navigation bar.

  • Customize the appearance of the navigation bar.

  • Configure your app to push and pop relevant navigation items as the user navigates through the hierarchical screens.

Use a navigation bar with a navigation controller

If you use a navigation controller to manage the navigation between different screens of content, the navigation controller creates a navigation bar automatically and pushes and pops navigation items when appropriate.

A navigation controller uses the navigationItem property on UIViewController to provide the model objects to its navigation bar when navigating a stack of view controllers. The default navigation item uses the view controllers title, but you can override the navigationItem on a UIViewController subclass to gain complete control of the navigation bars content.

A navigation controller automatically assigns itself as the delegate of its navigation bar object. Therefore, when using a navigation controller, dont assign a custom delegate object to the corresponding navigation bar.

To access the navigation bar associated with a navigation controller, use the navigationBar property on UINavigationController. See Customize the appearance of a navigation bar for details on how to customize the appearance of a navigation bar.

For information about navigation controllers, see UINavigationController.

Add content to a standalone navigation bar

In the vast majority of scenarios you use a navigation bar as part of a navigation controller. However, there are situations for which you might want to use the navigation bar UI and implement your own approach to content navigation. In these situations, you can use a standalone navigation bar.

When you use a navigation bar as a standalone object, youre responsible for providing its content. Unlike other types of views, you dont add subviews to a navigation bar directly. Instead, you use a navigation item (an instance of the UINavigationItem class) to specify what buttons or custom views you want displayed. A navigation item has properties for specifying views on the left, right, and center of the navigation bar and for specifying a custom prompt string.

A navigation bar manages a stack of UINavigationItem objects. Although the stack is there mostly to support navigation controllers, you can use it to implement your own custom navigation interface. The topmost item in the stack represents the navigation item whose contents are currently displayed by the navigation bar. You push new navigation items onto the stack using the pushItem(_:animated:) method and pop items off the stack using the popItem(animated:) method. Both of these changes can be animated for the benefit of the user.

In addition to pushing and popping items, you can also set the contents of the stack directly using either the items property or the setItems(_:animated:) method. You might use this method at launch time to restore your interface to its previous state or to push or pop more than one navigation item at a time. The following figure shows the part of the UINavigationBar API responsible for managing the stack of navigation items.

If youre using a navigation bar as a standalone object, assign a custom delegate object to the delegate property and use that object to intercept messages coming from the navigation bar. Delegate objects must conform to the UINavigationBarDelegate protocol. The delegate notifications let you track when navigation items are pushed or popped from the stack. You use these notifications to update the rest of your apps user interface.

For more information about creating navigation items, see UINavigationItem. For more information about implementing a delegate object, see UINavigationBarDelegate.

Customize the appearance of a navigation bar

Navigation bars have two standard appearance styles: white with dark text or black with light text. Use the barStyle property to select the style. Any changes you make to other navigation bar appearance properties override those inferred from the bar style.

Navigation bars are translucent by default; their background color is semitransparent. You can make the navigation bar opaque by setting the isTranslucent property to false.

You can specify a custom tint color for a navigation bar background using the barTintColor property. Setting this property overrides the default color inferred from the bar style. As with all UIView subclasses, you can control the color of the interactive elements within navigation bars, including button images and titles, using the tintColor property.

The titleTextAttributes property specifies the attributes for displaying the bars title text. You can specify the font, text color, text shadow color, and text shadow offset for the title in the text attributes dictionary using the font, foregroundColor, and shadow keys in Swift and the NSFontAttributeName, NSForegroundColorAttributeName, and NSShadowAttributeName keys in Objective-C, respectively. For more information about string-formatting attributes, see Character Attributes.

Use the setTitleVerticalPositionAdjustment(_:for:) method to adjust the vertical position of the title. This method allows you to specify the adjustment dependent on the bar height, which is represented by the UIBarMetrics enum. The following figure shows a navigation bar with custom tint color, title text attributes, and bar tint color.

To allow complete customization over the appearance of navigation bars, you can additionally provide custom background and shadow images. To provide a custom background image, use the setBackgroundImage(_:for:barMetrics:) method, providing a UIImage object for the appropriate bar position and metrics values. Use a UIBarPosition value for the bar position argument to specify whether to use the supplied image at the bottom or the top of the window, and if it appears at the top, whether to extend it upward under the status bar. Similarly, you can specify that the image should be used for either compact or default bar metrics, with or without a prompt, by providing a UIBarMetrics value to the bar metrics argument.

To add a shadow, provide a resizable UIImage to the shadowImage property. To use the custom shadow image, you need to have specified a custom background image. The following figure shows a navigation bar with a custom background image, supplied using setBackgroundImage(_:for:barMetrics:) with a bar position value of UIBarPosition.topAttached and a bar metrics value of UIBarMetrics.default. A custom image has also been provided to the shadowImage property.

To see examples of customizing a navigation bar, see Customizing your apps navigation bar.

Customize a navigation bar with Interface Builder

The following table lists the core attributes that you configure for navigations bars in the Attributes Inspector within Interface Builder.

Attribute Description
Style Specifies the UI bar style to apply to the navigation bar. The bar style controls the title color and the bar tint color, but you can override it by providing values for those attributes. Select Translucent to make the navigation bar semitransparent. Access these values at runtime with the barStyle and isTranslucent properties.
Bar Tint Controls the tint color of the navigation bar. This overrides the value implied by the Style attribute. If the Translucent attribute is selected, the Bar Tint color is automatically made semitransparent. Access this value at runtime with the barTintColor property.
Shadow Image Represents the image used as a shadow beneath the navigation bar. This image is stretched horizontally to match the width of the bar. Access this value at runtime with the shadowImage property.
Back Image Specifies the image that appears at the leading edge of the back button. This attribute must be used in combination with the Back Mask attribute. Access this value at runtime with the backIndicatorImage property.
Back Mask Specifies the mask associated with the Back Image attribute. This is used to control the appearance of the Back button during animated transitions, and therefore must be used in conjunction with the Back Image attribute. Access this value at runtime with the backIndicatorTransitionMaskImage property.

The following table lists the Interface Builder attributes that affect the appearance of the navigation bars title.

Attribute Description
Title Font The font used to render the title in the center of the navigation bar. Access this value at runtime with the value stored against the font key in Swift or the NSFontAttributeName key in Objective-C in the dictionary in the titleTextAttributes property.
Title Color The color used to render the navigation bar title. Access this value at runtime using the foregroundColor key in Swift or the NSForegroundColorAttributeName key in Objective-C in the dictionary in the titleTextAttributes property.
Title Shadow Specifies the color and offset of the shadow used when rendering the navigation bars title. Access these values at runtime with the dictionary in the \ [titleTextAttributes] property, using the shadow key in Swift or the NSShadowAttributeName key in Objective-C.

Internationalize a navigation bar

To internationalize navigation bars, specify a localized string for each of the displayed string properties of the navigation item model objects.

For more information about internationalizing your interface, see Internationalization and Localization Guide.

Make a navigation bar accessible

Navigation bars are accessible by default. The default accessibility trait for a navigation bar is User Interaction Enabled.

With VoiceOver enabled on an iOS device, after the user navigates to a new view in the hierarchy, VoiceOver reads the navigation bars title, followed by the name of the left bar button item. When the user taps an element in a navigation bar, VoiceOver reads the name and the type of the element; for example, “General back button,” “Keyboard heading,” and “Edit button.”

For general information about making your interface accessible, see Accessibility Programming Guide for iOS.

Topics

Responding to navigation bar changes

var delegate: (any UINavigationBarDelegate)?

The navigation bars delegate object.

protocol UINavigationBarDelegate

Methods that a navigation bar calls before and after it modifies its stack of navigation items.

Pushing and popping items

func pushItem(UINavigationItem, animated: Bool)

Pushes the given navigation item onto the navigation bars stack and updates the UI.

Pops the top item from the navigation bars stack and updates the UI.

func setItems([UINavigationItem]?, animated: Bool)

Replaces the navigation items currently managed by the navigation bar with the specified items.

var items: [UINavigationItem]?

An array of navigation items managed by the navigation bar.

var topItem: UINavigationItem?

The navigation item at the top of the navigation bars stack.

var backItem: UINavigationItem?

The navigation item that is immediately below the topmost item on a navigation bars stack.

Customizing the bars appearance

var prefersLargeTitles: Bool

A Boolean value that indicates whether the title displays in a large format.

var standardAppearance: UINavigationBarAppearance

The appearance settings for a standard-height navigation bar.

var compactAppearance: UINavigationBarAppearance?

The appearance settings for a compact-height navigation bar.

var scrollEdgeAppearance: UINavigationBarAppearance?

The appearance settings for the navigation bar when the edge of scrollable content aligns with the edge of the navigation bar.

var compactScrollEdgeAppearance: UINavigationBarAppearance?

The appearance settings for a compact-height navigation bar when the edge of scrollable content aligns with the edge of the navigation bar.

var isTranslucent: Bool

A Boolean value that indicates whether the navigation bar is translucent.

Customize appearance information directly on the navigation bar object.

Building with Mac Catalyst

var behavioralStyle: UIBehavioralStyle

The behavioral style of the navigation bar.

var preferredBehavioralStyle: UIBehavioralStyle

The preferred behavioral style of the navigation bar.

var currentNSToolbarSection: UINavigationBar.NSToolbarSection

The toolbar section that the navigation bar is currently using.

enum NSToolbarSection

Constants that determine how the system hosts the navigation bar in an AppKit toolbar.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIBarPositioning
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Container view controllers

Creating a custom container view controller

Create a composite interface by combining content from one or more view controllers with other custom views.

class UISplitViewController

A container view controller that implements a hierarchical interface.

class UINavigationController

A container view controller that defines a stack-based scheme for navigating hierarchical content.

class UINavigationItem

The items that a navigation bar displays when the associated view controller is visible.

class UITabBarController

A container view controller that manages a multiselection interface, where the selection determines which child view controller to display.

class UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

class UITabBarItem

An object that describes an item in a tab bar.

class UITab

An object that manages a tab in a tab bar.

class UITabAccessory Beta

class UISearchTab

A tab subclass that represents the systems search tab.

class UITabGroup

An object that manages a collection of tab objects.

class UIPageViewController

A container view controller that manages navigation between pages of content, where a subview controller manages each page.


https://developer.apple.com/documentation/uikit/uisearchbar


https://developer.apple.com/documentation/uikit/uitoolbar


https://developer.apple.com/documentation/uikit/uitabbar

  • UIKit
  • UITabBar

Class

UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

tvOS

@MainActor class UITabBar

Overview

Typically, you use tab bars in conjunction with a UITabBarController object, but you can also use them as standalone controls in your app. Tab bars always appear across the bottom edge of the screen and display the contents of one or more UITabBarItem objects. A tab bars appearance can be customized with a background image or tint color to suit the needs of your interface. Tapping an item selects and highlights that item, and you use the selection of the item to enable the corresponding mode for your app.

You can configure tab bars programmatically or in Interface Builder. A UITabBarController object provides its own tab bar object and you must configure the object provided to you. When creating a tab bar programmatically, use the init(frame:) method or another view initializer method to set its initial configuration. Use the methods of this class to configure the appearance of the tab bar. For tab bars you create yourself, you also use the methods of this class to specify the items displayed by the tab bar.

A tab bar reports selections and user customizations to its delegate object. For tab bars you create yourself, use the delegate to respond to selections or to the addition, removal, or reordering of items in the tab bar. (A UITabBarController object acts as the delegate for the tab bar it manages.) For more information on implementing a tab bar delegate, see UITabBarDelegate.

Configure the tab bar items

You can configure tab bar items using Interface Builder or create and configure them programmatically in your code. Tab bars in Interface Builder come preconfigured with some initial items and you can add, remove, or reorder items as needed. How you configure items at design time depends on whether your tab bar is associated with a UITabBarController object:

  • Configuring your tab bar in Interface Builder:

  • When a UITabBarController object is present, add or remove view controllers to your scene and create relationship segues between the tab bar controller and each new view controller. Creating a relationship segue automatically adds a new item to the tab bar, and deleting an existing relationship segue removes the corresponding tab bar item.

  • When a tab bar controller isnt present, drag tab bar items from the library onto your tab bar.

  • Configuring your tab bar programmatically:

  • To configure the tab bar associated with a UITabBarController object, configure the view controllers associated with the tab bar controller. The tab bar automatically obtains its items from the tabBarItem property of each view controller associated with the tab bar controller.

  • To configure tab bar items directly, use the setItems(_:animated:) method of the tab bar itself.

A tab bar displays all of its tabs onscreen at once, using the itemPositioning property to determine how to position items in the available space. If you have more items than can fit in the available space, display only a subset of them and let the user select which tabs are displayed. The beginCustomizingItems(_:) method displays an interface for selecting which tab bar items to display.

The contents of each item are stored in a UITabBarItem object. Each item contains a title and an image to display in the tab. You can also use tab bar items to add a badge to the corresponding tab. For more information about creating and configuring items, see UITabBarItem.

Respond to tab selections

For tab bars with an associated tab bar controller, the tab bar controller automatically manages selections and displays the appropriate view controller. The only time you have to manage selections yourself is when you create the tab bar without a tab bar controller. The tab bar reports selections to the tabBar(_:didSelect:) method of its delegate object, which you can use to respond to selection changes. For more information about implementing the delegate object, see UITabBarDelegate.

Configure a tab bar with Interface Builder

The following table lists the attributes that you configure for tab bars in Interface Builder.

Attribute Discussion
Background The background image to display for the bar. If you specify a stretchable image, the image is stretched to fit the available space; otherwise, the image is tiled. When you configure a background image, the tab bar ignores the tint color information. To set this attribute programmatically, use the backgroundImage property.
Shadow The custom shadow image for the tab bar. This attribute is ignored if the tab bar does not also have a custom background image. To set this attribute programmatically, use the shadowImage property.
Selection The image to use for the selected tab. To set this attribute programmatically, use the selectionIndicatorImage property.
Image Tint The tint color to apply to the selected item. To set this attribute programmatically, use the tintColor property.
Style The basic style to apply to the bar. You can configure a tab bar with a dark or light style and the bar can be opaque or translucent. To set the style programmatically, use the barStyle and isTranslucent properties.
Bar Tint The tint color to apply to the bar. To set this attribute programmatically, use the barTintColor property.
Item Positioning The positioning scheme to apply to items. Use this attribute to configure how items are spaced across the length of the tab bar. To set this attribute programmatically, use the itemPositioning property.

Internationalize a tab bar

To internationalize a tab bar, you must provide localized strings for the tab bar item titles.

For more information, see Localization.

Make a tab bar accessible

Tab bars are accessible by default.

With VoiceOver enabled on an iOS device, when a user touches a tab in a tab bar, VoiceOver reads the title of the tab, its position in the bar, and whether its selected. For example in the iTunes app on iPad, you might hear “Selected, Audiobooks, four of seven” or “Genius, six of seven.”

For general information about making your interface accessible, see Accessibility for UIKit.

For design guidance, see Human Interface Guidelines.

Topics

Customizing the tab bar behavior

var delegate: (any UITabBarDelegate)?

The tab bars delegate object.

protocol UITabBarDelegate

The UITabBarDelegate protocol defines optional methods for a delegate of a UITabBar object. The UITabBar class provides the ability for the user to reorder, remove, and add items to the tab bar; this process is referred to as customizing the tab bar. The tab bar delegate receives messages when customizing occurs.

Configuring tab bar items

var items: [UITabBarItem]?

The items displayed by the tab bar.

func setItems([UITabBarItem]?, animated: Bool)

Sets the items on the tab bar, optionally animating any changes into position.

var selectedItem: UITabBarItem?

The currently selected item on the tab bar.

Customizing tab bar appearance

var standardAppearance: UITabBarAppearance

The appearance settings for a standard-height tab bar.

var scrollEdgeAppearance: UITabBarAppearance?

The appearance settings for the tab bar when the edge of scrollable content aligns with the edge of the tab bar.

var leadingAccessoryView: UIView

The view at the leading edge of a tab bar on tvOS.

var trailingAccessoryView: UIView

The view at the trailing edge of a tab bar on tvOS.

var isTranslucent: Bool

A Boolean value that indicates whether the tab bar is translucent.

Customize appearance information directly on the tab bar object.

Supporting user customization of tab bars

func beginCustomizingItems([UITabBarItem])

Presents a standard interface that lets the user customize the contents of the tab bar.

Dismisses the standard interface used to customize the tab bar.

var isCustomizing: Bool

A Boolean value indicating whether the user is currently customizing the tab bar.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UISpringLoadedInteractionSupporting
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Container view controllers

Creating a custom container view controller

Create a composite interface by combining content from one or more view controllers with other custom views.

class UISplitViewController

A container view controller that implements a hierarchical interface.

class UINavigationController

A container view controller that defines a stack-based scheme for navigating hierarchical content.

class UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

class UINavigationItem

The items that a navigation bar displays when the associated view controller is visible.

class UITabBarController

A container view controller that manages a multiselection interface, where the selection determines which child view controller to display.

class UITabBarItem

An object that describes an item in a tab bar.

class UITab

An object that manages a tab in a tab bar.

class UITabAccessory Beta

class UISearchTab

A tab subclass that represents the systems search tab.

class UITabGroup

An object that manages a collection of tab objects.

class UIPageViewController

A container view controller that manages navigation between pages of content, where a subview controller manages each page.


https://developer.apple.com/documentation/uikit/uitabbaritem

  • UIKit
  • UITabBarItem

Class

UITabBarItem

An object that describes an item in a tab bar.

tvOS

@MainActor class UITabBarItem

Overview

A tab bar item is a segment of a tab bar that represents a specific section of your app. A tab bar displays one or more items that allow the user to switch between the different sections. The user can select one item at a time.

The most common approach for displaying a tab bar is to use a tab bar controller. The controllers tab bar displays an item for each view controller you provide when you set the viewControllers property or call the setViewControllers(_:animated:) method. Youre responsible for supplying the tab bar items. Do this by setting each view controllers tabBarItem property. When the user selects an item, the tab bar controller displays its view controller. For more information, see UITabBarController.

You can also use a tab bar independent of a tab bar controller. After creating a tab bar, add it to your view hierarchy. Provide the items by setting the tab bars items property or by using the setItems(_:animated:) method. In this configuration, youre responsible for updating the view hierarchy to display the correct content. Use UITabBarDelegate to know when the selection changes. For more information, see UITabBar.

The system provides several tab bar items for common use cases. If you need a custom item, create one with a title and an image. You can further customize the item by providing an alternate image that appears when the user selects it. By default, the item doesnt display the images you provide. Instead, it generates new images from the alpha values of your images and tints them. To prevent this, provide images that use the UIImage.RenderingMode.alwaysOriginal rendering mode.

An item can adjust its appearance when in certain conditions. For example, you can specify different appearances for inline and compact inline layouts or for when the items state changes. To do this, set the items standardAppearance property. If you dont want this behavior, you can set the individual properties on the item instead.

A tab bar item can display a supplementary value in a badge that provides extra information to the user. For example, the Phone app uses a badges value to display the number of missed calls. You can customize the badges appearance, including its background color and text attributes.

Topics

Creating a tab bar item

convenience init(tabBarSystemItem: UITabBarItem.SystemItem, tag: Int)

Creates a tab bar item using a system-provided configuration.

convenience init(title: String?, image: UIImage?, tag: Int)

Creates a tab bar item that displays a title and an image.

convenience init(title: String?, image: UIImage?, selectedImage: UIImage?)

Creates a tab bar item that toggles the image it displays when its selected state changes.

init()

Creates a tab bar item with a default configuration.

init?(coder: NSCoder)

Creates a tab bar item from a serialized instance.

enum SystemItem

Constants that represent the system tab bar items.

Configuring the items appearance

var selectedImage: UIImage?

The source image the item uses to generate its selected image.

var standardAppearance: UITabBarAppearance?

The appearance settings for a tab bar.

var scrollEdgeAppearance: UITabBarAppearance?

The appearance settings for the tab bar when the edge of scrollable content aligns with the edge of the tab bar.

var titlePositionAdjustment: UIOffset

The offset to apply to the titles position.

Configuring the items badge

var badgeValue: String?

The text that the items badge displays.

var badgeColor: UIColor?

The background color of the items badge.

func setBadgeTextAttributes([NSAttributedString.Key : Any]?, for: UIControl.State)

Registers text attributes that the badge uses for the specified state.

Returns the badges text attributes for the specified state.

Relationships

Inherits From

  • UIBarItem

Conforms To

  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIAppearance
  • UIPopoverPresentationControllerSourceItem
  • UISpringLoadedInteractionSupporting

See Also

Container view controllers

Creating a custom container view controller

Create a composite interface by combining content from one or more view controllers with other custom views.

class UISplitViewController

A container view controller that implements a hierarchical interface.

class UINavigationController

A container view controller that defines a stack-based scheme for navigating hierarchical content.

class UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

class UINavigationItem

The items that a navigation bar displays when the associated view controller is visible.

class UITabBarController

A container view controller that manages a multiselection interface, where the selection determines which child view controller to display.

class UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

class UITab

An object that manages a tab in a tab bar.

class UITabAccessory Beta

class UISearchTab

A tab subclass that represents the systems search tab.

class UITabGroup

An object that manages a collection of tab objects.

class UIPageViewController

A container view controller that manages navigation between pages of content, where a subview controller manages each page.


https://developer.apple.com/documentation/uikit/uibarpositioning

  • UIKit
  • UIBarPositioning

Protocol

UIBarPositioning

A set of methods for defining the positioning of bars in iOS apps.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIBarPositioning : NSObjectProtocol

Overview

Bars can be positioned at the bottom of their enclosing view, at the top of their enclosing view, or at both the top of their enclosing view and also the top of the screen. In this last case, the bar will abut the status bar displayed by the system. Bars in this position need to have their background extend above their own frame to the top of the screen. This allows the background to show through the status bar.

The classes that implement bars have paired methods to set a background for a given position and set of metrics. These are named similar to the following: backgroundImage(for:barMetrics:) and setBackgroundImage(_:for:barMetrics:). Use these methods to set an appropriate background image for the different possible bar positions and metrics.

Topics

Accessing the bar position

var barPosition: UIBarPosition

The position of the bar.

Required

Constants

enum UIBarMetrics

Constants to specify metrics to use for appearance.

enum UIBarPosition

Constants to identify the position of a bar.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UINavigationBar
  • UISearchBar
  • UIToolbar

See Also

Bars

class UIBarItem

An abstract superclass for items that you can add to a bar that appears at the bottom of the screen.

class UIBarButtonItem

A specialized button for placement on a toolbar, navigation bar, or shortcuts bar.

class UIBarButtonItemGroup

A group of one or more bar button items for placement on a navigation bar or shortcuts bar.

class UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

class UISearchBar

A specialized view for receiving search-related information from the user.

class UIToolbar

A control that displays one or more buttons along the bottom edge of your interface.

class UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

class UITabBarItem

An object that describes an item in a tab bar.

protocol UIBarPositioningDelegate

A set of methods that support the positioning of a bar that conforms to the UIBarPositioning protocol.


https://developer.apple.com/documentation/uikit/uibarpositioningdelegate

  • UIKit
  • UIBarPositioningDelegate

Protocol

UIBarPositioningDelegate

A set of methods that support the positioning of a bar that conforms to the UIBarPositioning protocol.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIBarPositioningDelegate : NSObjectProtocol

Overview

Navigation bars, toolbars, and search bars all have delegates that support the UIBarPositioning protocol. The delegate can use the method of this protocol to specify the bars position when that bar is moved to a window. The UINavigationBarDelegate, UISearchBarDelegate, and UIToolbarDelegate protocols extend this protocol to allow for the positioning of those bars on the screen.

Topics

Positioning Bars

Asks the delegate for the position of the specified bar in its new window.

Relationships

Inherits From

  • NSObjectProtocol

Inherited By

  • UINavigationBarDelegate
  • UISearchBarDelegate
  • UIToolbarDelegate

See Also

Bars

class UIBarItem

An abstract superclass for items that you can add to a bar that appears at the bottom of the screen.

class UIBarButtonItem

A specialized button for placement on a toolbar, navigation bar, or shortcuts bar.

class UIBarButtonItemGroup

A group of one or more bar button items for placement on a navigation bar or shortcuts bar.

class UINavigationBar

Navigational controls that display in a bar along the top of the screen, usually in conjunction with a navigation controller.

class UISearchBar

A specialized view for receiving search-related information from the user.

class UIToolbar

A control that displays one or more buttons along the bottom edge of your interface.

class UITabBar

A control that displays one or more buttons in a tab bar for selecting between different subtasks, views, or modes in an app.

class UITabBarItem

An object that describes an item in a tab bar.

protocol UIBarPositioning

A set of methods for defining the positioning of bars in iOS apps.


https://developer.apple.com/documentation/uikit/uilargecontentviewerinteraction

  • UIKit
  • UILargeContentViewerInteraction

Class

UILargeContentViewerInteraction

An interaction that enables a gesture to present the large content viewer for cases when supporting the largest dynamic type sizes isnt appropriate.

@MainActor class UILargeContentViewerInteraction

Overview

Dont use the large content viewer as a replacement for proper Dynamic Type support. For example, Dynamic Type allows items in a list to grow or shrink vertically to accommodate the users preferred font size. Rely on the large content viewer only in situations where items must remain small due to unavoidable design constraints. For example, buttons in a tab bar remain small to leave more room for the main app content.

For more information about allowing your apps content to adjust to varying font sizes, see Add Dynamic Type support and the Human Interface Guidelines.

Topics

Creating large content viewer interactions

init(delegate: (any UILargeContentViewerInteractionDelegate)?)

Creates an interaction object with the specified delegate.

Customizing large content viewer interactions

var delegate: (any UILargeContentViewerInteractionDelegate)?

An object that can fine-tune the large content viewer interactions, especially in the presence of other gesture recognizers.

var gestureRecognizerForExclusionRelationship: UIGestureRecognizer

A gesture recognizer that you can use to set up simultaneous recognition or failure relationships with other gesture recognizers.

Detecting the large content viewer

class var isEnabled: Bool

A Boolean value that indicates whether the large content viewer is enabled on the device.

class let enabledStatusDidChangeNotification: NSNotification.Name

A notification the system posts when it enables or disables the large content viewer.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable
  • UIInteraction

See Also

Content viewer

protocol UILargeContentViewerInteractionDelegate

An object that customizes the behavior of the large content viewer interactions.

protocol UILargeContentViewerItem

Methods that provide details about how to display your custom content in the large content viewer.


https://developer.apple.com/documentation/uikit/uilargecontentviewerinteractiondelegate

  • UIKit
  • UILargeContentViewerInteractionDelegate

Protocol

UILargeContentViewerInteractionDelegate

An object that customizes the behavior of the large content viewer interactions.

@MainActor protocol UILargeContentViewerInteractionDelegate : NSObjectProtocol

Topics

Customizing large content viewer interactions

func largeContentViewerInteraction(UILargeContentViewerInteraction, didEndOn: (any UILargeContentViewerItem)?, at: CGPoint)

Performs an action when the large content viewer gesture ends at the location of the specified item.

Identifies the large content viewer item for the specified interaction and location.

Specifies which view controller should display the large content viewer.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Content viewer

class UILargeContentViewerInteraction

An interaction that enables a gesture to present the large content viewer for cases when supporting the largest dynamic type sizes isnt appropriate.

protocol UILargeContentViewerItem

Methods that provide details about how to display your custom content in the large content viewer.


https://developer.apple.com/documentation/uikit/uilargecontentvieweritem

  • UIKit
  • UILargeContentViewerItem

Protocol

UILargeContentViewerItem

Methods that provide details about how to display your custom content in the large content viewer.

@MainActor protocol UILargeContentViewerItem : NSObjectProtocol

Topics

Integrating with the large content viewer

var showsLargeContentViewer: Bool

A Boolean value that indicates whether or not to show the item in the large content viewer.

Required

Configuring display properties

var largeContentTitle: String?

A string that describes an item to display in the large content viewer.

var largeContentImage: UIImage?

An image that represents an item to display in the large content viewer.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the items image so it appears visually centered in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the view scales the items image to a larger size or not.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIActionSheet
  • UIActivityIndicatorView
  • UIAlertView
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewListCell
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIEventAttributionView
  • UIImageView
  • UIInputView
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UIPageControl
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITableView
  • UITableViewCell
  • UITableViewHeaderFooterView
  • UITextField
  • UITextView
  • UIToolbar
  • UIView
  • UIVisualEffectView
  • UIWebView
  • UIWindow

See Also

Content viewer

class UILargeContentViewerInteraction

An interaction that enables a gesture to present the large content viewer for cases when supporting the largest dynamic type sizes isnt appropriate.

protocol UILargeContentViewerInteractionDelegate

An object that customizes the behavior of the large content viewer interactions.


https://developer.apple.com/documentation/uikit/uieventattributionview

  • UIKit
  • UIEventAttributionView

Class

UIEventAttributionView

An overlay view that verifies user interaction for Web AdAttributionKit.

@MainActor class UIEventAttributionView

Overview

Web AdAttributionKit (formerly known as Private Click Measurement, or PCM) is a proposed web standard that allows external websites to measure when external links, such as ads, result in a conversion. The external website decides what constitutes a conversion, but its often the result of the user making a purchase or signing up for a service. Web AdAttributionKit doesnt send any user-identifiable information to the remote server, so it protects user privacy, while providing websites the ability to measure the effectiveness of their ad campaigns.

Apps running in iOS 17.4 or later can use AdAttributionKit to record click-through impressions on custom rendered ad content using a UIEventAttributionView. For more information about click-through in AdAttributionKit, see Presenting ads in your app.

Apps running in iOS 14.5 or later can take advantage of Web AdAttributionKit by sending event attribution data to the browser when opening an external link. If the linked website reports a conversion within 7 days, the browser forwards your appʼs Web AdAttributionKit data to a specified remote server sometime between 24 and 48 hours after the reported conversion.

You cant subclass UIEventAttributionView.

For more information on the proposed Web AdAttributionKit web standard, see Introducing Private Click Measurement and Private Click Measurement Draft Community Group Report.

Verify user interaction

Event attribution views overlay other UIKit controls to ensure that either handling a tap with AdAttributionKit or opening an external link with Web AdAttributionKit data only happens as the result of a user tap. The system doesnt handle the tap or send event attribution data to the browser unless a UIEventAttributionView exists above the tapped control.

Create an event attribution view

Place an event attribution view above any view that launches external links with event attribution data and make sure there are no other overlapping views above the event attribution view that might intercept taps. UIEventAttributionView doesnt consume tap events, so the behavior of any control below one in the view hierarchy isnt affected.

If multiple views or controls in your app can launch an external link using Web AdAttributionKit, use a separate UIEventAttributionView to overlay each control. While you can use a single UIEventAttributionView to validate more than one control, attribution views that cover large portions of the screen may impact performance because the system must validate all user interactions that pass through the attribution view.

Heres how to add an event attribution view to an in-app advertisement:

// Create an event attribution view. let eventAttributionView = UIEventAttributionView()

// Place it over the ad view. eventAttributionView.translatesAutoresizingMaskIntoConstraints = false adView.addSubview(eventAttributionView) NSLayoutConstraint.activate([
adView.topAnchor.constraint(equalTo: eventAttributionView.topAnchor),
adView.leadingAnchor.constraint(equalTo: eventAttributionView.leadingAnchor),
adView.trailingAnchor.constraint(equalTo: eventAttributionView.trailingAnchor),
adView.bottomAnchor.constraint(equalTo: eventAttributionView.bottomAnchor)
])

// Create an event attribution view. UIEventAttributionView *eventAttributionView = [[UIEventAttributionView alloc] init];

// Place it over the ad view. eventAttributionView.translatesAutoresizingMaskIntoConstraints = NO; [adView addSubview:eventAttributionView]; [NSLayoutConstraint activateConstraints: @[
[adView.topAnchor constraintEqualToAnchor:eventAttributionView.topAnchor],
[adView.leadingAnchor constraintEqualToAnchor:eventAttributionView.leadingAnchor],
[adView.trailingAnchor constraintEqualToAnchor:eventAttributionView.trailingAnchor],
[adView.bottomAnchor constraintEqualToAnchor:eventAttributionView.bottomAnchor]
]];

For more information on sending Web AdAttributionKit event attribution data to the browser when opening an external link, see UIEventAttribution.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Private Click Measurement (PCM)

class UIEventAttribution

An object that contains event attribution information for Web AdAttributionKit.

NSAdvertisingAttributionReportEndpoint

The URL where Private Click Measurement and SKAdNetwork send attribution information.


https://developer.apple.com/documentation/uikit/uieventattribution

  • UIKit
  • UIEventAttribution

Class

UIEventAttribution

An object that contains event attribution information for Web AdAttributionKit.

@MainActor class UIEventAttribution

Overview

Apps use event attribution objects to send data to the browser when opening an external website that supports Web AdAttributionKit (formerly known as Private Click Measurement, or PCM). For more information on the proposed PCM web standard, see Introducing Private Click Measurement and Private Click Measurement Draft Community Group Report.

You cant subclass UIEventAttribution.

Define an endpoint

In order to use Web AdAttributionKit, your app defines an Info.plist key called NSAdvertisingAttributionReportEndpoint that contains the URL to which the browser sends event attribution data. When an externally linked website reports that a conversion has occurred, the browser forwards your apps event attribution data to the endpoint specified in the Info.plist. If your apps Info.plist doesnt contain this key, the browser wont be able to forward the Web AdAttributionKit data when a conversion occurs.

Send event attribution data to the browser only when your app opens an external link as a result of a user tapping a control that sits below a UIEventAttributionView in the apps view hierarchy. The event attribution view verifies that the user tapped a control. If that control doesnt sit below an event attribution view, the system wont send the Web AdAttributionKit data to the browser when opening the external link.

Create an event attribution data object

Heres how you create a UIEventAttribution object:

let adURL = URL(string: "https://shop.example/tabletStandDeluxe.html")! let eventAttribution = UIEventAttribution(sourceIdentifier: 4, destinationURL: adURL, sourceDescription: "Banner ad for Tablet Stand Deluxe.", purchaser: "Shop Example, Inc.")

NSURL *adURL = [NSURL URLWithString:@"https://shop.example/tabletStandDeluxe.html"]; UIEventAttribution *eventAttribution = [[UIEventAttribution alloc]
initWithSourceIdentifier:4
destinationURL:adURL
sourceDescription:@"Banner ad for Tablet Stand Deluxe."
purchaser:@"Shop Example, Inc."];

Send event attribution data to the browser

Once you create a UIEventAttribution object, send it to the browser when your app opens a URL as the result of a user tap. If the external website reports a conversion within 7 days, the browser forwards the data from the UIEventAttribution object to the specified remote server sometime between 24 and 48 hours after the conversion.

There are two different ways to send event attribution data when your app opens an external link, depending on whether your app uses UIScene or UIApplication for life cycle management. For more information on application life cycle management, see Managing your apps life cycle.

If your app uses UIScene-based life cycle management, create a UIScene.OpenExternalURLOptions object, assign the event attribution object you created to its eventAttribution property, and call open(_:options:completionHandler:):

let sceneOpenURLOptions = UIScene.OpenExternalURLOptions() sceneOpenURLOptions.eventAttribution = eventAttribution

self.view.window?.windowScene?.open(adURL, options: sceneOpenURLOptions, completionHandler: nil)

UISceneOpenExternalURLOptions *sceneOpenURLOptions = [[UISceneOpenExternalURLOptions alloc] init]; sceneOpenURLOptions.eventAttribution = eventAttribution; [self.view.window.windowScene openURL:adURL
options:sceneOpenURLOptions
completionHandler:^(BOOL success) {
if (success == NO) {
// Handle error
}
}];

If your app uses UIApplication-based life cycle management, create a dictionary that contains the eventAttribution key with the UIEventAttribution object you created as its value, and call open(_:options:completionHandler:), passing the dictionary using the options parameter.

let appOpenURLOptions: [UIApplication.OpenExternalURLOptionsKey : Any] = [
.eventAttribution: eventAttribution
] UIApplication.shared.open(adURL, options: appOpenURLOptions, completionHandler: nil)

[[UIApplication sharedApplication] openURL:adURL
options:appOpenURLOptions
completionHandler:^(BOOL success) {
if (success == NO) {
// Handle error
}
}];

Send event attribution data to SFSafariViewController

If your app displays a web page in SFSafariViewController after a person taps an ad, add a UIEventAttributionView subview to the ad view or control in order to measure taps. When a person taps the ad, follow these steps:

  1. Create an SFSafariViewController.Configuration object.

  2. Assign the UIEventAttribution object you created to the eventAttribution property of the SFSafariViewController.Configuration object.

  3. Initialize an SFSafariViewController instance with the configuration object, and present it. SFSafariViewController validates that a tap on a UIEventAttributionView initiated the navigation to the webpage. If not, it discards the attribution data.

Topics

Creating event attribution objects

init(sourceIdentifier: UInt8, destinationURL: URL, sourceDescription: String, purchaser: String)

Initializes a new event attribution object.

Setting attribution details

var destinationURL: URL

The destination URL to attribute.

var purchaser: String

The entity that purchased the ad or content.

var reportEndpoint: URL?

The URL that receives attribution data.

var sourceDescription: String

A string describing the source tapped to launch the external link.

var sourceIdentifier: UInt8

A number that identifies the source of the attribution.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable

See Also

Private Click Measurement (PCM)

class UIEventAttributionView

An overlay view that verifies user interaction for Web AdAttributionKit.

NSAdvertisingAttributionReportEndpoint

The URL where Private Click Measurement and SKAdNetwork send attribution information.


https://developer.apple.com/documentation/uikit/using-swiftui-with-uikit

  • UIKit
  • Views and controls
  • Using SwiftUI with UIKit

Sample Code

Using SwiftUI with UIKit

Learn how to incorporate SwiftUI views into a UIKit app.

Download

Xcode 13.4+

Overview


https://developer.apple.com/documentation/uikit/uioffset

  • UIKit
  • UIOffset

Structure

UIOffset

A structure that specifies an amount to offset a position.

iOSiPadOSMac CatalysttvOSvisionOS

struct UIOffset

Overview

The components are positive for right or down, negative for left or up.

See also Initializing offsets and zero.

Topics

Initializing offsets

init(horizontal: CGFloat, vertical: CGFloat)

Creates an offset structure from the given components.

init()

Creates an offset structure.

Getting the offset values

var horizontal: CGFloat

The amount of horizontal offset from a position.

var vertical: CGFloat

The amount of vertical offset from a position.

Comparing offsets

Returns a Boolean value that indicates whether two offsets are equal.

Deprecated

Converting to and from strings

Returns a string formatted to contain the data from an offset structure.

Returns a UIKit offset structure corresponding to the data in a given string.

Getting the empty offset value

static let zero: UIOffset

An offset structure with no offset in the horizontal and vertical directions.

Relationships

Conforms To

  • BitwiseCopyable
  • Copyable
  • Decodable
  • Encodable
  • Equatable
  • Sendable
  • SendableMetatype

See Also

struct UIAxis

A structure that specifies the layout axes.

struct UIEdgeInsets

The inset distances for views.

struct NSDirectionalEdgeInsets

The inset distances for views, taking the user interface layout direction into account.

struct NSDirectionalRectEdge

Constants that specify an edge or a set of edges, taking the user interface layout direction into account.

enum NSRectAlignment

Constants that specify alignment to an edge or a set of edges depending on the user interface layout direction.

struct UIDirectionalRectEdge

Macros that UIKit defines.


https://developer.apple.com/documentation/uikit/uiaxis

  • UIKit
  • UIAxis

Structure

UIAxis

A structure that specifies the layout axes.

struct UIAxis

Topics

Constants

static var horizontal: UIAxis

A value that represents the horizontal axis.

static var vertical: UIAxis

A value that represents the vertical axis.

static var both: UIAxis

A value that represents both axes.

Initializers

init(rawValue: UInt)

Creates an axis with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • ExpressibleByArrayLiteral
  • OptionSet
  • RawRepresentable
  • Sendable
  • SendableMetatype
  • SetAlgebra

See Also

struct UIOffset

A structure that specifies an amount to offset a position.

struct UIEdgeInsets

The inset distances for views.

struct NSDirectionalEdgeInsets

The inset distances for views, taking the user interface layout direction into account.

struct NSDirectionalRectEdge

Constants that specify an edge or a set of edges, taking the user interface layout direction into account.

enum NSRectAlignment

Constants that specify alignment to an edge or a set of edges depending on the user interface layout direction.

struct UIDirectionalRectEdge

Deprecated

Macros that UIKit defines.


https://developer.apple.com/documentation/uikit/uiedgeinsets

  • UIKit
  • UIEdgeInsets

Structure

UIEdgeInsets

The inset distances for views.

iOSiPadOSMac CatalysttvOSvisionOS

struct UIEdgeInsets

Overview

Edge inset values are applied to a rectangle to shrink or expand the area represented by that rectangle. Typically, edge insets are used during view layout to modify the views frame. Positive values cause the frame to be inset (or shrunk) by the specified amount. Negative values cause the frame to be outset (or expanded) by the specified amount.

See also init(top:left:bottom:right:) and zero.

Topics

Creating edge insets

init(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat)

Creates an edge insets structure with the specified edges.

init()

Initializes the edge insets structure to default values.

Getting the edge values

var bottom: CGFloat

The bottom edge inset value.

var left: CGFloat

The left edge inset value.

var right: CGFloat

The right edge inset value.

var top: CGFloat

The top edge inset value.

Converting to and from strings

Returns a string formatted to contain the data from an edge insets structure.

Returns a UIKit edge insets structure based on the data in the specified string.

Getting the empty edge insets

static let zero: UIEdgeInsets

An edge insets struct whose top, left, bottom, and right fields are all set to 0.

Comparing edge insets

Returns a Boolean value indicating whether the two edge insets are the same.

Deprecated

Relationships

Conforms To

  • BitwiseCopyable
  • Copyable
  • Decodable
  • Encodable
  • Equatable
  • Sendable
  • SendableMetatype

See Also

struct UIOffset

A structure that specifies an amount to offset a position.

struct UIAxis

A structure that specifies the layout axes.

struct NSDirectionalEdgeInsets

The inset distances for views, taking the user interface layout direction into account.

struct NSDirectionalRectEdge

Constants that specify an edge or a set of edges, taking the user interface layout direction into account.

enum NSRectAlignment

Constants that specify alignment to an edge or a set of edges depending on the user interface layout direction.

struct UIDirectionalRectEdge

Macros that UIKit defines.


https://developer.apple.com/documentation/uikit/nsdirectionaledgeinsets


https://developer.apple.com/documentation/uikit/nsdirectionalrectedge

  • UIKit
  • NSDirectionalRectEdge

Structure

NSDirectionalRectEdge

Constants that specify an edge or a set of edges, taking the user interface layout direction into account.

struct NSDirectionalRectEdge

Topics

Constants

static var top: NSDirectionalRectEdge

The top edge.

static var leading: NSDirectionalRectEdge

The leading edge.

static var bottom: NSDirectionalRectEdge

The bottom edge.

static var trailing: NSDirectionalRectEdge

The trailing edge.

static var all: NSDirectionalRectEdge

All edges.

Initializers

init(rawValue: UInt)

Creates an edge with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • ExpressibleByArrayLiteral
  • OptionSet
  • RawRepresentable
  • Sendable
  • SendableMetatype
  • SetAlgebra

See Also

struct UIOffset

A structure that specifies an amount to offset a position.

struct UIAxis

A structure that specifies the layout axes.

struct UIEdgeInsets

The inset distances for views.

struct NSDirectionalEdgeInsets

The inset distances for views, taking the user interface layout direction into account.

enum NSRectAlignment

Constants that specify alignment to an edge or a set of edges depending on the user interface layout direction.

struct UIDirectionalRectEdge

Deprecated

Macros that UIKit defines.


https://developer.apple.com/documentation/uikit/nsrectalignment


https://developer.apple.com/documentation/uikit/uidirectionalrectedge

  • UIKit
  • UIDirectionalRectEdge Deprecated

Structure

UIDirectionalRectEdge

Constants that specify an edge or a set of edges, taking the user interface layout direction into account.

iOS 13.013.0DeprecatediPadOS 13.013.0DeprecatedMac Catalyst 13.113.1DeprecatedtvOS 13.013.0DeprecatedwatchOS 6.06.0Deprecated

struct UIDirectionalRectEdge

Topics

Constants

static var top: UIDirectionalRectEdge

The top edge.

static var leading: UIDirectionalRectEdge

The leading edge.

static var bottom: UIDirectionalRectEdge

The bottom edge.

static var trailing: UIDirectionalRectEdge

The trailing edge.

static var all: UIDirectionalRectEdge

All edges.

Initializers

init(rawValue: UInt)

Creates an edge with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • ExpressibleByArrayLiteral
  • OptionSet
  • RawRepresentable
  • Sendable
  • SendableMetatype
  • SetAlgebra

See Also

struct UIOffset

A structure that specifies an amount to offset a position.

struct UIAxis

A structure that specifies the layout axes.

struct UIEdgeInsets

The inset distances for views.

struct NSDirectionalEdgeInsets

The inset distances for views, taking the user interface layout direction into account.

struct NSDirectionalRectEdge

enum NSRectAlignment

Constants that specify alignment to an edge or a set of edges depending on the user interface layout direction.

Macros that UIKit defines.


https://developer.apple.com/documentation/uikit/uikit-macros


https://developer.apple.com/documentation/uikit/uicontrol)


https://developer.apple.com/documentation/uikit/uikit-catalog-creating-and-customizing-views-and-controls).

.#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/collection-views)


https://developer.apple.com/documentation/uikit/table-views)


https://developer.apple.com/documentation/uikit/uistackview)


https://developer.apple.com/documentation/uikit/uiscrollview)


https://developer.apple.com/documentation/uikit/uiactivityindicatorview)


https://developer.apple.com/documentation/uikit/uicalendarview)


https://developer.apple.com/documentation/uikit/uicontentunavailableview)


https://developer.apple.com/documentation/uikit/uiimageview)


https://developer.apple.com/documentation/uikit/uipickerview)


https://developer.apple.com/documentation/uikit/uiprogressview)


https://developer.apple.com/documentation/uikit/uiwebview)


https://developer.apple.com/documentation/uikit/responding-to-control-based-events-using-target-action)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton)


https://developer.apple.com/documentation/uikit/uicolorwell)


https://developer.apple.com/documentation/uikit/uidatepicker)


https://developer.apple.com/documentation/uikit/uipagecontrol)


https://developer.apple.com/documentation/uikit/uisegmentedcontrol)


https://developer.apple.com/documentation/uikit/uislider)


https://developer.apple.com/documentation/uikit/uistepper)


https://developer.apple.com/documentation/uikit/uiswitch)


https://developer.apple.com/documentation/uikit/uilabel)


https://developer.apple.com/documentation/uikit/uitextfield)


https://developer.apple.com/documentation/uikit/uitextview)


https://developer.apple.com/documentation/uikit/drag-and-drop-customization)


https://developer.apple.com/documentation/uikit/uisearchtextfield)


https://developer.apple.com/documentation/uikit/uisearchtoken)


https://developer.apple.com/documentation/uikit/uisearchtextfielddelegate)


https://developer.apple.com/documentation/uikit/uivisualeffect)


https://developer.apple.com/documentation/uikit/uivisualeffectview)


https://developer.apple.com/documentation/uikit/uivibrancyeffect)


https://developer.apple.com/documentation/uikit/uiblureffect)


https://developer.apple.com/documentation/uikit/uibaritem)


https://developer.apple.com/documentation/uikit/uibarbuttonitem)


https://developer.apple.com/documentation/uikit/uibarbuttonitemgroup)


https://developer.apple.com/documentation/uikit/uinavigationbar)


https://developer.apple.com/documentation/uikit/uisearchbar)


https://developer.apple.com/documentation/uikit/uitoolbar)


https://developer.apple.com/documentation/uikit/uitabbar)


https://developer.apple.com/documentation/uikit/uitabbaritem)


https://developer.apple.com/documentation/uikit/uibarpositioning)


https://developer.apple.com/documentation/uikit/uibarpositioningdelegate)


https://developer.apple.com/documentation/uikit/uilargecontentviewerinteraction)


https://developer.apple.com/documentation/uikit/uilargecontentviewerinteractiondelegate)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uilargecontentvieweritem)


https://developer.apple.com/documentation/uikit/uieventattributionview)


https://developer.apple.com/documentation/uikit/uieventattribution)


https://developer.apple.com/documentation/uikit/using-swiftui-with-uikit)


https://developer.apple.com/documentation/uikit/uioffset)


https://developer.apple.com/documentation/uikit/uiaxis)


https://developer.apple.com/documentation/uikit/uiedgeinsets)


https://developer.apple.com/documentation/uikit/nsdirectionaledgeinsets)


https://developer.apple.com/documentation/uikit/nsdirectionalrectedge)


https://developer.apple.com/documentation/uikit/nsrectalignment)


https://developer.apple.com/documentation/uikit/uidirectionalrectedge)


https://developer.apple.com/documentation/uikit/uikit-macros)


https://developer.apple.com/documentation/uikit/uimanageddocument

  • UIKit
  • UIManagedDocument

Class

UIManagedDocument

A managed document object that integrates with Core Data.

@MainActor class UIManagedDocument

Overview

UIManagedDocument is a concrete subclass of UIDocument. When you initialize a managed document, you specify the URL for the document location. The document object then creates a Core Data stack to use to access the documents persistent store using a managed object model from the apps main bundle. UIManagedDocument performs all the basic setup you need for Core Data, and in some cases you may use instances of the class directly (without a need to subclass). You can supply configuration options for the creation of the coordinator using persistentStoreOptions, and for the model using modelConfiguration. You can also perform additional customization by creating a subclass of UIManagedDocument:

  • Override persistentStoreName to customize the name of the persistent store file inside the documents file package.

  • Override managedObjectModel to customize creation of the managed object model.

You do this if, for example, your app supports multiple document types, each of which uses a different model. You want to ensure that the models arent merged for each document class.

  • Override persistentStoreType(forFileType:) to customize the type of persistent store used by a document.

  • Override configurePersistentStoreCoordinator(for:ofType:modelConfiguration:storeOptions:) to customize the loading or creation of a persistent store.

Handling errors

To enable your app to observe and handle errors in saving and validating a managed document, you must subclass the UIManagedDocument class and override one or both of the following two inherited methods from the UIDocument class:

  • handleError(_:userInteractionPermitted:)

  • finishedHandlingError(_:recovered:)

Overriding is required because otherwise, the only information your app receives on error is the stateChangedNotification notification, which doesnt contain a userInfo dictionary and so doesnt convey specific error information.

Topics

Managing the Core Data stack

func configurePersistentStoreCoordinator(for: URL, ofType: String, modelConfiguration: String?, storeOptions: [AnyHashable : Any]?) throws

Creates or loads the documents persistent store.

var managedObjectContext: NSManagedObjectContext

The documents managed object context.

var managedObjectModel: NSManagedObjectModel

The documents managed object model.

var persistentStoreOptions: [AnyHashable : Any]?

Options used when creating the documents persistent store.

var modelConfiguration: String?

A model configuration name to be passed when configuring the persistent store.

Returns the Core Data store type for a given document file type.

Customizing read and write operations

func readAdditionalContent(from: URL) throws

Handles reading non-Core Data content in the additional content directory in the documents file package.

Handles writing non-Core Data content to the additional content directory in the documents file package.

func writeAdditionalContent(Any, to: URL, originalContentsURL: URL?) throws

Handles writing non-Core Data content to the documents file package.

Naming the persistent store file

class var persistentStoreName: String

Returns the name for the persistent store file inside the documents file package.

Relationships

Inherits From

  • UIDocument

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSFilePresenter
  • NSObjectProtocol
  • ProgressReporting
  • Sendable
  • SendableMetatype
  • UIUserActivityRestoring

See Also

Documents

class UIDocument

An abstract base class for managing discrete portions of your apps data.

Synchronizing documents in the iCloud environment

Manage documents across multiple devices to create a seamless editing and collaboration experience.


https://developer.apple.com/documentation/uikit/synchronizing-documents-in-the-icloud-environment

  • UIKit
  • Documents, data, and pasteboard
  • Synchronizing documents in the iCloud environment

Sample Code

Synchronizing documents in the iCloud environment

Manage documents across multiple devices to create a seamless editing and collaboration experience.

Download

Xcode 12.4+

Overview

As technology advances, more and more people generate their digital assets from different devices, and expect those assets to synchronize seamlessly. To support such use cases, apps need to discover the assets, as well as their changes, from all the devices, and present the user with a consistent view.

This sample demonstrates how to discover and synchronize documents in the iCloud environment, and manage them to achieve high performance and a low memory footprint. These documents can be the digital assets or any user data.

The sample also demonstrates how to publish an iCloud container to iCloud Drive so that the user can access the containers Documents folder from other apps. Additionally, it shows how to support the Open-in-Place feature, which allows the user to launch an app by tapping a document in Files, and then edit it directly.

Configure the sample code project

Before building the sample, perform the following steps in Xcode:

  1. In the General pane of the SimpleiCloudDocument target, update the Bundle Identifier field with a new identifier.

  2. In the Signing & Capabilities pane, select the applicable team from the Team drop-down menu to let Xcode automatically manage the provisioning profile. See Assign a project to a team for details.

  3. If you prefer to use a different container, select it from the Containers list, specify the container identifier when creating the MetadataProvider instance in the viewDidLoad method of the MainViewController class. An iCloud container identifier is case-sensitive and must begin with “ iCloud.”.

  4. Find the NSUbiquitousContainers entry in the Info.plist file, and change the iCloud container identifier there as well.

Before running the sample on a device, configure the device as follows:

  1. Log in with an Apple ID. For documents to synchronize across devices, the Apple ID must be the same on all devices.

  2. Prepare some pictures in the Photo Library to use in the sample.

Publish an iCloud container to iCloud Drive

Publishing an iCloud container to iCloud Drive makes the containers Documents folder appear in iCloud Drive so the user can access the folder from other apps. Follow these steps to publish a container:

  1. Provide the containers metadata by adding an NSUbiquitousContainers entry to the Info.plist file like the example code below demonstrates.

  2. Increase the bundle version by changing the Build field in the General pane of the Xcode target, or the CFBundleVersion entry in the Info.plist file. The new value must be larger than the previous value when using the compare(_:options:range:) method with the NSString.CompareOptions.numeric option to compare, and must only contain numeric (0 9) and period (.) characters. The system only updates an apps iCloud container metadata when detecting a new version, so perform this step every time the metadata changes.

  3. Make sure the Documents folder exists in the iCloud container and has at least one document.

The NSUbiquitousContainers entry of the sample is as follows:

Support Open-in-Place

The Open-in-Place feature allows the user to launch an app by tapping a document of the type the app owns. After opening it, the app can change the document directly without copying it to the apps sandbox container. Follow these steps to implement the feature:

  1. Declare and export a document type for the app by adding the CFBundleDocumentTypes and UTExportedTypeDeclarations Info.plist entries. Make sure the type conforms to at least public.content and public.data in the UTTypeConformsTo entry so that the other system components, like UIActivityViewController, recognize it.

  2. Add the LSSupportsOpeningDocumentsInPlace key to the Info.plist file, and set the value to YES.

  3. Implement the scene(_:openURLContexts:) method of the UISceneDelegate protocol to accept the document.

Apps need to wrap the code that accesses the passed-in URL with the startAccessingSecurityScopedResource and stopAccessingSecurityScopedResource methods if the URL is outside of their sandbox. This sample doesnt explicitly do that because it accesses the URL via UIDocument, which handles security-scoped bookmarks automatically.

Discover documents in an iCloud container

iOS apps use NSMetadataQuery rather than file system APIs to discover documents in an iCloud container. When an app creates an iCloud document on one device, iCloud first synchronizes the document metadata to the other devices to tell them about the existence of the document. Then, depending on the device types, iCloud may or may not continue to synchronize the document data. For iOS devices, iCloud doesnt synchronize the document data until an app asks (either explicitly or implicitly). When an iOS app receives a notification that a new document exists, the document data may not physically exist on the local file system, so it isnt discoverable with file system APIs.

To watch the metadata changes in the iCloud container, the sample creates an NSMetadataQuery object. It uses the following code to configure and start the query to gather the changes of documents that are in the iCloud container and have an .sicd extension name.

metadataQuery.notificationBatchingInterval = 1 metadataQuery.searchScopes = [NSMetadataQueryUbiquitousDataScope, NSMetadataQueryUbiquitousDocumentsScope] metadataQuery.predicate = NSPredicate(format: "%K LIKE %@", NSMetadataItemFSNameKey, "*." + Document.extensionName) metadataQuery.sortDescriptors = [NSSortDescriptor(key: NSMetadataItemFSNameKey, ascending: true)] metadataQuery.start()

A query has two phases when gathering the metadata: the initial phase that collects all currently matching results, and a second phase that gathers live updates. It posts an NSMetadataQueryDidFinishGathering notification when it finishes the first phase, and an NSMetadataQueryDidUpdate notification each time an update occurs. To avoid potential conflicts with the system, disable the query update when accessing the results, and enable it after finishing the access, as the following example shows:

var result = MetadataItem metadataQuery.disableUpdates() if let metadatItems = metadataQuery.results as? [NSMetadataItem] { result = metadataItemList(from: metadatItems) } metadataQuery.enableUpdates() return result }

Manage a large data set

Documents in this sample could potentially contain many images, and the images might be large. To load image data only when necessary, and release the data immediately after using it, the Document class provides public methods for directly accessing the images in the document package. As an example, the following method retrieves a full image asynchronously:

performAsynchronousFileAccess { let imageFileURL = self.fileURL.appendingPathComponent(imageName) let fileCoordinator = NSFileCoordinator(filePresenter: self) fileCoordinator.coordinate(readingItemAt: imageFileURL, options: .withoutChanges, error: nil) { newURL in if let imageData = try? Data(contentsOf: newURL), let image = UIImage(data: imageData) { completionHandler(image) } else { completionHandler(nil) } } } }

When directly manipulating the files in the document package, the sample calls the performAsynchronousFileAccess(_:) method to serialize the file access in the background queue, and uses NSFileCoordinator to coordinate the reading or writing.

Likewise, to avoid the default implementation that loads image data to FileWrapper objects and keeps it in memory, the sample overrides the save(to:for:completionHandler:) method to directly remove or add image files when updating a document.

if saveOperation != .forCreating { print("(#function)") return performAsynchronousFileAccess { let fileCoordinator = NSFileCoordinator(filePresenter: self) fileCoordinator.coordinate(writingItemAt: self.fileURL, options: .forMerging, error: nil) { newURL in let success = self.fulfillUnsavedChanges() self.fileModificationDate = Date() if let completionHandler = completionHandler { DispatchQueue.main.async { completionHandler(success) } } } } } super.save(to: url, for: saveOperation, completionHandler: completionHandler) }

Resolve version conflicts

In the iCloud environment, the user can edit a document from different devices. Depending on networking conditions and the timing of synchronization, that may trigger version conflicts. Apps that provide support for iCloud documents need to resolve these conflicts, and remove the obsolete versions so they dont consume the users iCloud storage.

To create a document conflict with the sample:

  1. Run the sample on two iOS devices with Internet connections that use the same Apple ID to log in to iCloud.

  2. Create a document with several images on one device, and watch the document synchronize with the other device.

  3. Turn on Airplane mode on both devices to disconnect them from the Internet.

  4. Change the document on both devices by adding some images on one device, removing some images from the other device, and then saving the changes.

  5. Turn off Airplane mode on both devices at the same time to connect them notification, which apps can observe and then implement their conflict resolution strategy.

The sample resolves a conflict by selecting the version that has the most recent modificationDate and removing all others. It uses file coordination to assess the version information of an iCloud document to avoid potential conflicts with the system.

DispatchQueue.global().async { NSFileCoordinator().coordinate(writingItemAt: document.fileURL, options: .contentIndependentMetadataOnly, error: nil) { newURL in let shouldRevert = self.pickLatestVersion(for: newURL) completionHandler?(shouldRevert) } } }

See Also

Documents

class UIDocument

An abstract base class for managing discrete portions of your apps data.

class UIManagedDocument

A managed document object that integrates with Core Data.


https://developer.apple.com/documentation/uikit/uidocumentviewcontroller

  • UIKit
  • UIDocumentViewController

Class

UIDocumentViewController

A view controller that manages and presents a document stored locally or in the cloud.

@MainActor class UIDocumentViewController

Mentioned in

Customizing a document-based apps launch experience

Overview

UIDocumentViewController presents a view that displays a document. It manages opening, saving, and closing the document. You can use UIDocumentViewController to present documents from a UIDocumentBrowserViewController, for instance. When you arent presenting documents from a UIDocumentBrowserViewController, UIDocumentViewController displays a button that, when tapped, presents a picker a person can use to choose the document to display.

The document view controllers document property is an optional UIDocument. While the document property value is nil, the document view controller displays a view depicting an empty state with the message, “No Document”. The empty state provides a prompt that reads “Select a document by tapping the Documents button at the top.”

When the document property value is not nil, the document view controller displays the document. You configure the view to display the document in the documentDidOpen() callback method.

The navigation item automatically assigns its title menu, its UIDocumentProperties object, undo and redo buttons, and renameDelegate from information in the document view controllers document.

UIDocumentViewController also provides sharing and drag and drop support, and key-commands for common actions such as undo and redo.

Subclassing notes

UIDocumentViewController is an abstract base class that is meant to be subclassed. To create a subclass, you override two methods.

  1. The system calls documentDidOpen() when someone opens the document associated with the document view controller, or when an object assigns a previously opened document to the document view controller.

  2. The system calls navigationItemDidUpdate() every time UIDocumentViewController makes changes to its navigation item.

Open and close documents

When the document view controller opens the document associated with it, or when an object assigns an already opened document to the document view controller, the system calls documentDidOpen(). You can populate the view controllers views to display the content of the document in this method:

override func documentDidOpen() { configureViewForCurrentDocument() }

Its good practice to configure the view in its own method and call that method in both documentDidOpen() and viewDidLoad(). There is no guarantee of the timing between when the system calls documentDidOpen() and when the system loads the view controllers view, so check that the view loaded and the document opened before configuring your views.

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

func configureViewForCurrentDocument() { guard let document = markdownDocument, !document.documentState.contains(.closed) && isViewLoaded else { return } // Configure views for document }

Customize navigation items

While UIDocumentViewController automatically sets the document title and other navigation items using information from the document, you can customize these items by overriding the navigationItemDidUpdate() method. The system calls navigationItemDidUpdate() every time UIDocumentViewController makes changes to the navigation item.

override func navigationItemDidUpdate() { // Customize the navigation item. }

Add sharing, drag and drop, and undo and redo

UIDocumentViewController automatically includes drag and drop, undo and redo, and sharing support. If you want undo and redo buttons to appear in your UIDocumentViewController, add a undoRedoItemGroup to the navigation bar and ensure that your custom UIDocument implements an undo manager. UIDocumentViewController sets the hidden property of this group, depending on the availability of an undo manager. It automatically enables or disables the buttons inside the group, as necessary.

Open a document from outside the class

UIDocumentViewController automatically opens and closes its document. However, if you need to access a document from outside the document view controller, you can create a new instance of UIDocumentViewController and call its openDocument(completionHandler:) method.

In this sample code, a UIDocumentBrowserViewController presents a document using a UIDocumentViewController.

// Open a document.

class BrowserViewController: UIDocumentBrowserViewController {

func presentDocument(_ document: MarkdownDocument) { let documentController = UIDocumentViewController(document: document) documentController.openDocument { success in if success { self.present(documentController, animated: true) } } }

}

UIDocumentViewController makes all the necessary callbacks, such as calling documentDidOpen() and, when the document is open, it calls the completion handler you provided.

Use the class as a root view controller

To use a UIDocumentViewController as the root view controller in an app, you need to declare the key “UIDocumentClass” for the relevant file type in your apps info.plist. Set the document class to the UIDocument subclass you are using in your app.

If there is no browser view controller in the hierarchy, UIDocumentViewController displays a document button that opens a document picker in the navigation bar.

Topics

Creating a document view controller

init(document: UIDocument?)

Creates a document view controller with a document.

Managing the document view

var document: UIDocument?

The document that the controller presents or edits.

Opens a document in a document view controller from outside the document view controller.

func documentDidOpen()

Provides an opportunity to configure the view after the system loads the controllers document into memory.

Customizing navigation items

func navigationItemDidUpdate()

Provides an opportunity to customize the navigation items after the navigation bar updates.

Adding undo and redo functionality

var undoRedoItemGroup: UIBarButtonItemGroup

The group that contains the undo/redo buttons that this view controller adds to the navigation bar.

Customizing the launch experience

var launchOptions: UIDocumentViewController.LaunchOptions

Options that customize a document-based apps launch view.

class LaunchOptions

Options for customizing the document launch view.

Relationships

Inherits From

  • UIViewController

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSExtensionRequestHandling
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIAppearanceContainer
  • UIContentContainer
  • UIFocusEnvironment
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIStateRestoring
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

https://developer.apple.com/documentation/uikit/uidatasourcemodelassociation


https://developer.apple.com/documentation/uikit/uipastecontrol

  • UIKit
  • UIPasteControl

Class

UIPasteControl

A button that a person taps to place pasteboard contents in your app.

@MainActor class UIPasteControl

Overview

You can configure the button to appear as an icon, text, or both. The following button represents the icon and text option:

In iOS 16 and later, programmatic pasting raises a user alert that prompts the user for approval before the app gains access to pasteboard contents ( UIPasteboard.general.string). Use this class to paste without a user prompt.

Add a paste button to a text view

The following code displays a paste button and assigns a text view as the recipient of pasteboard contents:

let textView = UITextView(frame: view.bounds) view.addSubview(textView)

let configuration = UIPasteControl.Configuration() configuration.baseBackgroundColor = .red configuration.baseForegroundColor = .magenta configuration.cornerStyle = .capsule configuration.displayMode = .iconAndLabel

let pasteButton = UIPasteControl(configuration: configuration) pasteButton.frame = CGRect(x: view.bounds.width/2.0, y: view.bounds.height/2.0, width: 150, height: 60) textView.addSubview(pasteButton)

pasteButton.target = textView

Topics

Creating a paste button

init?(coder: NSCoder)

Creates a paste button by deserializing the specified coder.

init(configuration: UIPasteControl.Configuration)

Creates a paste button that conforms to the specified configuration.

init(frame: CGRect)

Creates a paste button with the specified size and position.

Identifying the content recipient

var target: (any UIPasteConfigurationSupporting)?

The UI control that receives pasted content.

Determining the buttons look

var configuration: UIPasteControl.Configuration

An object that customizes the look of the paste button.

class Configuration

An object that determines a paste buttons color, corner style, icon, and text.

Relationships

Inherits From

  • UIControl

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UIContextMenuInteractionDelegate
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Pasteboard

enum DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

class UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

class UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.

protocol UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.


https://developer.apple.com/documentation/uikit/uipastecontrol/configuration-swift.class

  • UIKit
  • UIPasteControl
  • UIPasteControl.Configuration

Class

UIPasteControl.Configuration

An object that determines a paste buttons color, corner style, icon, and text.

@MainActor class Configuration

Overview

The paste button ( UIPasteControl) property configuration is of this type.

Topics

Coloring the button

var baseBackgroundColor: UIColor?

A color for the paste buttons background.

var baseForegroundColor: UIColor?

A color for the paste buttons icon and text.

Shaping button corners

var cornerRadius: CGFloat

A value that rounds the edges of a paste button.

var cornerStyle: UIButton.Configuration.CornerStyle

A shape for the button among a predetermined set of templates.

Choosing control icon and text

var displayMode: UIPasteControl.DisplayMode

An option that determines whether the paste button composes an icon, textual label, or both.

enum DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

Instance Properties

var imagePlacement: NSDirectionalRectEdge

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable

See Also

Pasteboard

class UIPasteControl

A button that a person taps to place pasteboard contents in your app.

class UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

class UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.

protocol UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.


https://developer.apple.com/documentation/uikit/uipastecontrol/displaymode

  • UIKit
  • UIPasteControl
  • UIPasteControl.DisplayMode

Enumeration

UIPasteControl.DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

enum DisplayMode

Overview

The paste button ( UIPasteControl) property displayMode is of this type.

Topics

Choosing a display mode

case iconAndLabel

A display mode for a button that composes an icon and a textual label.

case iconOnly

A display mode for an icon button.

case labelOnly

A display mode for a textual label.

Enumeration Cases

case arrowAndLabel

Initializers

init?(rawValue: UInt)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Pasteboard

class UIPasteControl

A button that a person taps to place pasteboard contents in your app.

class Configuration

An object that determines a paste buttons color, corner style, icon, and text.

class UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

class UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.

protocol UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.


https://developer.apple.com/documentation/uikit/uipasteboard

  • UIKit
  • UIPasteboard

Class

UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

class UIPasteboard

Overview

For sharing data with any other app, use the systemwide general pasteboard. For sharing data with another app from your team — that has the same team ID as the app to share from — configure an App Group. For more information about configuring an App Group, see Configuring app groups.

In typical usage, an object in your app writes data to a pasteboard when the user requests a copy, cut, or duplicate operation on a selection in the user interface. Another object in the same or different app then reads that data from the pasteboard and presents it to the user at a new location. This usually happens when the user requests a paste operation.

The general pasteboard and named pasteboards

The system identifies the systemwide general pasteboard with the general pasteboard name, and you can use it for any type of data. Obtain the general pasteboard from the general shared system pasteboard object.

You can create named pasteboards with the class methods init(name:create:) and withUniqueName() for sharing data within your app, and from your app to other apps that have the same Team ID.

Using pasteboards

The UIPasteboard class provides methods for reading and writing individual pasteboard items, as well as methods for reading and writing multiple pasteboard items at once. For more information, see Getting and setting pasteboard items in the topic groups below. The data to write to a pasteboard can be in one of the following forms:

  • If the data is an object that conforms to NSItemProviderWriting, use setItemProviders(_:localOnly:expirationDate:) to write it to the pasteboard.

  • If you can represent the data with a common object — such as NSString, NSArray, NSDictionary, NSDate, NSNumber, UIImage, or NSURL — you can write it to the pasteboard as a value using a method such as setValue(_:forPasteboardType:).

  • If the data is binary, use the setData(_:forPasteboardType:) method to write it to the pasteboard.

The UIPasteboard class provides convenience methods for writing and reading strings, images, URLs, and colors to and from single or multiple pasteboard items. See Getting and setting pasteboard items of standard data types in the topic groups below.

UIPasteboard provides properties for directly checking whether specific data types are present on a pasteboard, see Checking for data types on a pasteboard in the topic groups below. Use these properties, rather than attempting to read pasteboard data, to avoid causing the system to needlessly attempt to fetch data before necessary, or when the data might not be present. For example, use the hasStrings property to determine whether to present a string-data paste option in the user interface, using code like the following:

if UIPasteboard.general.hasStrings { // Enable string-related control... }

Use the following properties to avoid user notifications and alerts when the system doesnt establish user intent:

  • numberOfItems

  • types, types(forItemSet:)

  • itemSet(withPasteboardTypes:)

  • hasColors, hasImages, hasStrings, hasURLs

  • canLoadObject(ofClass:), canLoadObject(ofClass:)

  • any of the pattern-detection methods in the Detecting patterns of content in pasteboard items group in the topic groups below

The system notifies the user when you access properties or call methods that pull data from the pasteboard if the system doesnt determine that the user intends to access that data.

Pasteboard items and representation types

When you write an object to a pasteboard, the pasteboard stores it as a pasteboard item. A pasteboard item consists of one or more key-value pairs in which the key identifies the representation type (sometimes called a pasteboard type) of the value.

A uniform type identifier frequently functions as the key for a representation type. For example, you can use the UTTypeJPEG uniform type identifier (a constant for public.jpeg) as a representation type key for JPEG data.

For a discussion of uniform type identifiers, and a list of common ones, see Uniform Type Identifiers.

Your app can use any string to name a representation type; however, for app-specific data types, its best practice to use reverse-DNS notation to ensure the uniqueness of the type (for example, com.myCompany.myApp.myType).

You can provide flexibility for data sharing by providing multiple representation types for a pasteboard item during a copy or cut operation. Various contexts within your app or other apps can then make use of an appropriate representation type. For example, when a user copies an image, your app can write multiple representation types, such as in the PNG, JPEG, and GIF data formats, to a pasteboard. If the original image is in PNG format, but the receiving app can handle only GIF images, it can still use the pasteboard data.

For more about representation types, read the discussion for the types instance method.

Sharing pasteboards between devices

When a user signs into iCloud, the general pasteboard automatically transfers its contents to nearby devices that use the same iCloud account. You can control Handoff behavior when writing contents to the general pasteboard, and can set an expiration for items, using the setItemProviders(_:localOnly:expirationDate:), setObjects(_:localOnly:expirationDate:), or setItems(_:options:) methods, as follows:

  • To exclude a pasteboard from Handoff, specify false for the localOnly parameter, or call the setItems(_:options:) method with the localOnly option.

  • To indicate an expiration time and date for copied data, provide the expirationDate parameter, or call the setItems(_:options:) method with the expirationDate option. At the time and date that you set, the system removes the pasteboard items from the pasteboard.

Using pasteboards with other objects

Although the UIPasteboard class is central to copy, paste, and duplicate operations, you can employ protocols and instances of other UIKit classes in these operations as well, such as the following:

  • UIEditMenuInteraction — Displays a menu with edit actions, such as Copy, Cut, Paste, Select, and Select All, above or below the selection.

  • UIActivityItemsConfigurationReading — Objects implement this protocol to indicate that they support copying and sharing data.

  • UIPasteConfigurationSupporting — Objects implement this protocol to indicate whether they support pasting with a specific UIPasteConfiguration.

  • UIResponder — Responders implement canPerformAction(_:withSender:) to enable or disable commands in the above-mentioned menu based on the current context.

  • UIResponderStandardEditActions — Responders implement methods that this informal protocol declares to handle the chosen menu commands (for example, copy: and paste:).

A typical app that implements copy, paste, and duplicate operations also manages and presents related selections in its user interface. In addition, your app needs to coordinate changes in pasteboard content with changes to its data model, as appropriate for your app.

Topics

Getting and removing pasteboards

class var general: UIPasteboard

The systemwide general pasteboard, which you use for general copy-paste operations.

init?(name: UIPasteboard.Name, create: Bool)

Returns a pasteboard that you identify by name, optionally creating it if it doesnt exist.

Returns an app pasteboard that you identify by a unique system-generated name.

class func remove(withName: UIPasteboard.Name)

Invalidates the designated app pasteboard.

Getting and setting pasteboard attributes

var name: UIPasteboard.Name

The name of the pasteboard.

var changeCount: Int

The number of times the pasteboards contents change.

Detecting patterns of content in pasteboard items

func detectPatterns(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>, completionHandler: (Result<Set<PartialKeyPath<UIPasteboard.DetectedValues>>, any Error>) -> ())

Requests that the data detection system identify the patterns that you specify for the pasteboard, and provide the patterns that it matches to your closure.

func detectedPatterns(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>) async throws -> Set<PartialKeyPath<UIPasteboard.DetectedValues>>

Requests that the data detection system asynchronously identify the patterns that you specify for the pasteboard, and return the patterns that it matches.

func detectPatterns(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>, inItemSet: IndexSet?, completionHandler: (Result<[Set<PartialKeyPath<UIPasteboard.DetectedValues>>], any Error>) -> ())

Requests that the data detection system identify the patterns that you specify for the pasteboard items, and provide the patterns that it matches to your closure.

func detectedPatterns(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>, inItemSet: IndexSet?) async throws -> [Set<PartialKeyPath<UIPasteboard.DetectedValues>>]

Requests that the data detection system asynchronously identify the patterns that you specify for the pasteboard items, and return the patterns that it matches.

func detectValues(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>, completionHandler: (Result<UIPasteboard.DetectedValues, any Error>) -> ())

Requests that the data detection system identify the types of data that you specify for the pasteboard, and provide the values that it matches to your closure.

func detectedValues(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>) async throws -> UIPasteboard.DetectedValues

Requests that the data detection system asynchronously identify the types of values that you specify for the pasteboard, and return the values that it matches.

func detectValues(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>, inItemSet: IndexSet?, completionHandler: (Result<[UIPasteboard.DetectedValues], any Error>) -> ())

Requests that the data detection system identify the types of data that you specify for the pasteboard items, and provide the values that it matches to your closure.

func detectedValues(for: Set<PartialKeyPath<UIPasteboard.DetectedValues>>, inItemSet: IndexSet?) async throws -> [UIPasteboard.DetectedValues]

Requests that the data detection system asynchronously identify the types of values that you specify for the pasteboard item, and return the values that it matches for each pasteboard.

struct DetectedValues

An object that contains common types of data that the data detection system matches for a pasteboard.

struct DetectionPattern

An object that represents a pattern to detect for the pasteboard, such as a URL, text, or a number.

Determining types of pasteboard items

var types: [String]

The types of the first item on the pasteboard.

Returns an array of representation types for each specified pasteboard item.

Returns whether the pasteboard holds data of the specified representation type.

Returns whether the specified pasteboard items contain data of the given representation types.

Returns an index set identifying pasteboard items having the specified representation types.

Getting and setting pasteboard items

var numberOfItems: Int

The number of items for the pasteboard.

var items: [[String : Any]]

The pasteboard items on the pasteboard.

func addItems([[String : Any]])

Appends pasteboard items to the current contents of the pasteboard.

func setItems([[String : Any]], options: [UIPasteboard.OptionsKey : Any])

Adds an array of items to a pasteboard, and sets privacy options for all the items on the pasteboard.

Returns the data on the pasteboard for the given representation type.

Returns the data objects in the indicated pasteboard items that have the given representation type.

func setData(Data, forPasteboardType: String)

Puts data on the pasteboard for the specified representation type.

Returns an object on the pasteboard for the given representation type.

Returns the objects on the indicated pasteboard items that have the given representation type.

func setValue(Any, forPasteboardType: String)

Puts an object on the pasteboard for the specified representation type.

Getting and setting pasteboard items of standard data types

var string: String?

The string value of the first pasteboard item.

var strings: [String]?

An array of strings in all pasteboard items.

var image: UIImage?

The image object of the first pasteboard item.

var images: [UIImage]?

An array of image objects in all pasteboard items.

var url: URL?

The URL object of the first pasteboard item.

var urls: [URL]?

An array of URL objects in all pasteboard items.

var color: UIColor?

The color object of the first pasteboard item.

var colors: [UIColor]?

An array of color objects in all pasteboard items.

Checking for data types on a pasteboard

var hasColors: Bool

A Boolean value that indicates whether the pasteboard contains contains a nonempty array of colors.

var hasImages: Bool

A Boolean value that indicates whether the pasteboard contains a nonempty array of images.

var hasStrings: Bool

A Boolean value that indicates whether the pasteboard contains a nonempty array of strings.

var hasURLs: Bool

A Boolean value that indicates whether the pasteboard contains a nonempty array of URLs.

Getting and setting item providers

var itemProviders: [NSItemProvider]

An array of item providers for the pasteboard.

func setItemProviders([NSItemProvider], localOnly: Bool, expirationDate: Date?)

Sets and configures an explicit array of item providers for the pasteboard.

func setObjects([any NSItemProviderWriting])

Sets an array of item providers for the pasteboard, based on a specified array of objects.

func setObjects([any NSItemProviderWriting], localOnly: Bool, expirationDate: Date?)

Sets and configures an array of item providers for the pasteboard, based on a specified array of objects.

Constants

struct Name

Constants that identify the name of a pasteboard.

Names identifying the system pasteboards.

struct OptionsKey

Options for describing pasteboard privacy.

Pasteboard-item representation types, as for a given object value.

Use these keys to access the representation types of pasteboard items that you add to, or remove from, a pasteboard.

Notifications

class let changedNotification: NSNotification.Name

A notification that a pasteboard object posts when its contents change.

class let removedNotification: NSNotification.Name

A notification that a pasteboard object posts just before an app removes it.

Deprecated

Review unsupported symbols and their replacements.

Structures

struct ChangedMessage Beta

struct RemovedMessage Beta

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable
  • SendableMetatype

See Also

Pasteboard

class UIPasteControl

A button that a person taps to place pasteboard contents in your app.

class Configuration

An object that determines a paste buttons color, corner style, icon, and text.

enum DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

class UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.

protocol UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.


https://developer.apple.com/documentation/uikit/uipasteconfiguration

  • UIKit
  • UIPasteConfiguration

Class

UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.

@MainActor class UIPasteConfiguration

Topics

Initializing a paste configuration

init()

Initializes a new paste configuration.

convenience init(acceptableTypeIdentifiers: [String])

Initializes a new paste configuration with a specified array of acceptable UTIs.

convenience init(forAccepting: any NSItemProviderReading.Type)

Initializes a new paste configuration with the UTIs declared as supported by a specified class.

Getting acceptable type identifiers

var acceptableTypeIdentifiers: [String]

An array of UTI strings that specify the types accepted by the paste configuration.

Adding acceptable type identifiers

func addAcceptableTypeIdentifiers([String])

Adds an array of UTI strings to a paste configuration, increasing the variety of types the paste configuration accepts.

func addTypeIdentifiers(forAccepting: any NSItemProviderReading.Type)

Expands the array of accepted UTIs for a paste configuration, based on those declared as supported by a specified class.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable

See Also

Pasteboard

class UIPasteControl

A button that a person taps to place pasteboard contents in your app.

class Configuration

An object that determines a paste buttons color, corner style, icon, and text.

enum DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

class UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

protocol UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.


https://developer.apple.com/documentation/uikit/uipasteconfigurationsupporting

  • UIKit
  • UIPasteConfigurationSupporting

Protocol

UIPasteConfigurationSupporting

The interface that determines whether a responder object supports paste configuration.

@MainActor protocol UIPasteConfigurationSupporting : NSObjectProtocol

Topics

Accessing the paste configuration

var pasteConfiguration: UIPasteConfiguration?

The paste configuration associated with the responder object.

Required

Performing a paste operation

Returns a Boolean value that determines whether the responder object can perform a paste operation using data provided by the item providers.

func paste(itemProviders: [NSItemProvider])

Performs a paste operation on the responder object.

Relationships

Inherits From

  • NSObjectProtocol

Inherited By

  • UITextDroppable
  • UITextPasteConfigurationSupporting

Conforming Types

  • UIAccessibilityElement
  • UIActionSheet
  • UIActivityIndicatorView
  • UIActivityViewController
  • UIAlertController
  • UIAlertView
  • UIApplication
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICloudSharingController
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewController
  • UICollectionViewListCell
  • UIColorPickerViewController
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIEventAttributionView
  • UIFontPickerViewController
  • UIImagePickerController
  • UIImageView
  • UIInputView
  • UIInputViewController
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UINavigationController
  • UIPageControl
  • UIPageViewController
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIReferenceLibraryViewController
  • UIRefreshControl
  • UIResponder
  • UIScene
  • UIScrollView
  • UISearchBar
  • UISearchContainerViewController
  • UISearchController
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UISplitViewController
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarController
  • UITableView
  • UITableViewCell
  • UITableViewController
  • UITableViewHeaderFooterView
  • UITextField
  • UITextFormattingViewController
  • UITextView
  • UIToolbar
  • UIVideoEditorController
  • UIView
  • UIViewController
  • UIVisualEffectView
  • UIWebView
  • UIWindow
  • UIWindowScene

See Also

Pasteboard

class UIPasteControl

A button that a person taps to place pasteboard contents in your app.

class Configuration

An object that determines a paste buttons color, corner style, icon, and text.

enum DisplayMode

Options that determine whether a paste button composes an icon, textual label, or both.

class UIPasteboard

An object that helps a user share data from one place to another within your app, and from your app to other apps.

class UIPasteConfiguration

The interface that an object implements to declare its ability to accept specific data types for pasting and for drag-and-drop activities.


https://developer.apple.com/documentation/uikit/uimanageddocument)


https://developer.apple.com/documentation/uikit/synchronizing-documents-in-the-icloud-environment)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocumentviewcontroller)


https://developer.apple.com/documentation/uikit/uidatasourcemodelassociation)


https://developer.apple.com/documentation/uikit/uipastecontrol)


https://developer.apple.com/documentation/uikit/uipastecontrol/configuration-swift.class)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uipastecontrol/displaymode)


https://developer.apple.com/documentation/uikit/uipasteboard)


https://developer.apple.com/documentation/uikit/uipasteconfiguration)


https://developer.apple.com/documentation/uikit/uipasteconfigurationsupporting)


https://developer.apple.com/documentation/uikit/uiactionsheet

  • UIKit
  • UIActionSheet Deprecated

Class

UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

iOS 2.08.3DeprecatediPadOS 2.08.3DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIActionSheet

Overview

In apps that target versions of iOS prior to iOS 8, use the UIActionSheet class to present the user with a set of alternatives for how to proceed with a given task. You can also use action sheets to prompt the user to confirm a potentially dangerous action. The action sheet contains an optional title and one or more buttons, each of which corresponds to an action to take.

Use the properties and methods of this class to configure the action sheets message, style, and buttons before presenting it. You should also assign a delegate to your action sheet. Your delegate object is responsible for performing the action associated with any buttons when theyre tapped and should conform to the UIActionSheetDelegate protocol. For more information about implementing the methods of the delegate, see UIActionSheetDelegate.

You can present an action sheet from a toolbar, tab bar, button bar item, or from a view. This class takes the starting view and current platform into account when determining how to present the action sheet. For applications running on iPhone and iPod touch devices, the action sheet typically slides up from the bottom of the window that owns the view. For applications running on iPad devices, the action sheet is typically displayed in a popover thats anchored to the starting view in an appropriate way. Taps outside of the popover automatically dismiss the action sheet, as do taps within any custom buttons. You can also dismiss it programmatically.

When presenting an action sheet on an iPad, there are times when you shouldnt include a cancel button. If youre presenting just the action sheet, the system displays the action sheet inside a popover without using an animation. Because taps outside the popover dismiss the action sheet without selecting an item, this results in a default way to cancel the sheet. Including a cancel button would therefore only cause confusion. However, if you have an existing popover and are displaying an action sheet on top of other content using an animation, a cancel button is still appropriate. For more information, see iOS Human Interface Guidelines.

Subclassing notes

UIActionSheet isnt designed to be subclassed, nor should you add views to its hierarchy. If you need to present a sheet with more customization than provided by the UIActionSheet API, you can create your own and present it modally with present(_:animated:completion:).

Topics

Creating action sheets

convenience init(title: String?, delegate: (any UIActionSheetDelegate)?, cancelButtonTitle: String?, destructiveButtonTitle: String?, otherButtonTitles: String, String...)

Creates an action sheet with the specified values.

init(title: String?, delegate: (any UIActionSheetDelegate)?, cancelButtonTitle: String?, destructiveButtonTitle: String?)

Initializes the action sheet using the specified starting parameters.

Setting properties

var delegate: (any UIActionSheetDelegate)?

The receivers delegate or nil if it doesnt have a delegate.

var title: String

The string that appears in the receivers title bar.

var isVisible: Bool

A Boolean value that indicates whether the receiver is displayed.

var actionSheetStyle: UIActionSheetStyle

The receivers presentation style.

Configuring buttons

Adds a custom button to the action sheet.

var numberOfButtons: Int

The number of buttons on the action sheet.

Returns the title of the button at the specified index.

var cancelButtonIndex: Int

The index number of the cancel button.

var destructiveButtonIndex: Int

The index number of the destructive button.

var firstOtherButtonIndex: Int

The index of the first custom button.

Presenting the action sheet

func show(from: UITabBar)

Displays an action sheet that originates from the specified tab bar.

func show(from: UIToolbar)

Displays an action sheet that originates from the specified toolbar.

func show(in: UIView)

Displays an action sheet that originates from the specified view.

func show(from: UIBarButtonItem, animated: Bool)

Displays an action sheet that originates from the specified bar button item.

func show(from: CGRect, in: UIView, animated: Bool)

Dismissing the action sheet

func dismiss(withClickedButtonIndex: Int, animated: Bool)

Dismisses the action sheet immediately using an optional animation.

Constants

enum UIActionSheetStyle

Specifies the style of an action sheet.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Deprecated classes

class UIAlertView

A view that displays an alert message.

Deprecated

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uialertview

  • UIKit
  • UIAlertView Deprecated

Class

UIAlertView

A view that displays an alert message.

iOS 2.09.0DeprecatediPadOS 2.09.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIAlertView

Overview

In apps that run in versions of iOS prior to iOS 8, use the UIAlertView class to display an alert message to the user. An alert view functions similar to but differs in appearance from an action sheet (an instance of UIActionSheet).

Using an alert view

Use the properties and methods defined in this class to set the title, message, and delegate of an alert view and configure the buttons in apps that run in versions of iOS prior to iOS 8. You must set a delegate if you add custom buttons. The delegate should conform to the UIAlertViewDelegate protocol. Use the show() method to display an alert view after its configured.

Subclassing notes

The UIAlertView class is intended to be used as-is and doesnt support subclassing. The view hierarchy for this class is private and must not be modified.

Topics

Creating alert views

convenience init(title: String?, message: String?, delegate: Any?, cancelButtonTitle: String?)

Convenience method for initializing an alert view.

convenience init(title: String, message: String, delegate: (any UIAlertViewDelegate)?, cancelButtonTitle: String?, otherButtonTitles: String, String...)

Creates an alert view with the specified values.

init(frame: CGRect)

Creates an alert view with the specified frame.

init?(coder: NSCoder)

Creates an alert view from data in an unarchiver.

Setting properties

var delegate: AnyObject?

The receivers delegate or nil if it doesnt have a delegate.

var alertViewStyle: UIAlertViewStyle

The kind of alert displayed to the user.

var title: String

The string that appears in the receivers title bar.

var message: String?

Descriptive text that provides more details than the title.

var isVisible: Bool

A Boolean value that indicates whether the receiver is displayed.

Configuring buttons

Adds a button to the receiver with the given title.

var numberOfButtons: Int

The number of buttons on the alert view.

Returns the title of the button at the given index.

Returns the text field at the given index

var cancelButtonIndex: Int

The index number of the cancel button.

var firstOtherButtonIndex: Int

The index of the first other button.

Displaying

func show()

Displays the receiver using animation.

Dismissing

func dismiss(withClickedButtonIndex: Int, animated: Bool)

Dismisses the receiver, optionally with animation.

Constants

enum UIAlertViewStyle

The presentation style of the alert.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uidocumentmenuviewcontroller

  • UIKit
  • UIDocumentMenuViewController Deprecated

Class

UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

iOS 8.011.0DeprecatediPadOS 8.011.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIDocumentMenuViewController

Topics

Creating a document menu

init(documentTypes: [String], in: UIDocumentPickerMode)

Initializes and returns a document menu to import or open the given file types.

init(url: URL, in: UIDocumentPickerMode)

Initializes and returns a document menu to export or move the given document.

init?(coder: NSCoder)

Creates a document menu from data in an unarchiver.

Getting the user-selected document picker

var delegate: (any UIDocumentMenuDelegate)?

The document menus delegate.

protocol UIDocumentMenuDelegate

A set of methods that you must implement to track user interactions with a document menu view controller.

Configuring a document menu

Adds a custom menu item to the list of document pickers.

enum UIDocumentMenuOrder

The insertion point for custom menu items.

Relationships

Inherits From

  • UIViewController

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSExtensionRequestHandling
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIAppearanceContainer
  • UIContentContainer
  • UIFocusEnvironment
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIStateRestoring
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uilocalnotification

  • UIKit
  • UILocalNotification Deprecated

Class

UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

iOS 4.010.0DeprecatediPadOS 4.010.0DeprecatedMac Catalyst 13.113.1DeprecatedwatchOS 2.03.0Deprecated

@MainActor class UILocalNotification

Overview

The operating system is responsible for delivering local notifications at their scheduled times; the app does not have to be running for this to happen. Although local notifications are similar to remote notifications in that they are used for displaying alerts, playing sounds, and badging app icons, they are composed and delivered locally and do not require connection with remote servers.

Local notifications are primarily intended for apps with timer-based behaviors and simple calendar or to-do list apps. An app that is running in the background may also schedule a local notification to inform the user of an incoming message, chat, or update. An app can have only a limited number of scheduled notifications; the system keeps the soonest-firing 64 notifications (with automatically rescheduled notifications counting as a single notification) and discards the rest.

When you create a local notification, you must specify either a specific date or a geographic region as the trigger for delivering the notification. Date-based notifications are delivered at the day and time you specify, and allowances can be made for time zone changes as needed. Region-based notifications are delivered when the user enters or exits the specified region. In both cases, you can specify whether the notifications are one-time events or can be rescheduled and delivered again.

After creating a UILocalNotification object, schedule it using either the scheduleLocalNotification(_:) or presentLocalNotificationNow(_:) method of the UIApplication class. The scheduleLocalNotification(_:) method uses the fire date to schedule delivery; the presentLocalNotificationNow(_:) method presents the notification immediately, regardless of the value of fireDate. You can cancel one or more local notifications using the cancelLocalNotification(_:) or cancelAllLocalNotifications() method of the UIApplication object.

When the system delivers a local notification, several things can happen, depending on the app state and the type of notification. If the app is not frontmost and visible, the system displays the alert message, badges the app, and plays a sound—whatever is specified in the notification. If the notification is an alert and the user taps the action button (or, if the device is locked, drags open the action slider), the app is woken up or launched. (If the user taps one of the custom actions you specify using the category property, the app is woken up or launched into the background.) In its application(_:didFinishLaunchingWithOptions:) method, the app delegate can obtain the UILocalNotification object from the launch options dictionary using the localNotification key. The delegate can inspect the properties of the notification and, if the notification includes custom data in its userInfo dictionary, it can access that data and process it accordingly. On the other hand, if the local notification only badges the app icon, and the user in response launches the app, the application(_:didFinishLaunchingWithOptions:) method is called, but no UILocalNotification object is included in the options dictionary. When the user selects a custom action, the app delegates application(_:handleActionWithIdentifier:for:completionHandler:) method is called to handle the action.

If the app is foremost and visible when the system delivers the notification, the app delegates application(_:didReceive:) is called to process the notification. Use the information in the provided UILocalNotification object to decide what action to take. The system does not display any alerts, badge the apps icon, or play any sounds when the app is already frontmost.

An app is responsible for managing the badge number displayed on its icon. For example, if a text-messaging app processes all incoming messages after receiving a local notification, it should remove the icon badge by setting the applicationIconBadgeNumber property of the UIApplication object to 0.

Topics

Scheduling a local notification

var fireDate: Date?

The date and time when the system should deliver the notification.

var timeZone: TimeZone?

The time zone of the notifications fire date.

var repeatInterval: NSCalendar.Unit

The calendar interval at which to reschedule the notification.

var repeatCalendar: Calendar?

The calendar the system should refer to when it reschedules a repeating notification.

var region: CLRegion?

The geographic region that triggers the notification.

var regionTriggersOnce: Bool

A Boolean value indicating whether crossing a geographic region boundary delivers only one notification.

Composing the alert

var alertBody: String?

The message displayed in the notification alert.

var alertAction: String?

The title of the action button or slider.

var alertTitle: String?

A short description of the reason for the alert.

var hasAction: Bool

A Boolean value that controls whether the notification shows or hides the alert action.

var alertLaunchImage: String?

Identifies the image used as the launch image when the user taps (or slides) the action button (or slider).

var category: String?

The name of a group of actions to display in the alert.

Configuring other parts of the notification

var applicationIconBadgeNumber: Int

The number to display as the apps icon badge.

var soundName: String?

The name of the file containing the sound to play when an alert is displayed.

var userInfo: [AnyHashable : Any]?

A dictionary for passing custom information to the notified app.

Constants

The default system sound for local notifications.

Initializers

init()

init?(coder: NSCoder)

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uimenucontroller

  • UIKit
  • UIMenuController Deprecated

Class

UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

iOS 3.016.0DeprecatediPadOS 3.016.0DeprecatedMac Catalyst 13.116.0DeprecatedvisionOS 1.01.0Deprecated

@MainActor class UIMenuController

Overview

The singleton UIMenuController instance is referred to as the editing menu. When you make this menu visible, UIMenuController positions it relative to a target rectangle on the screen; this rectangle usually defines a selection. The menu appears above the target rectangle or, if there isnt enough space for it, below it. The menus pointer is placed at the center of the top or bottom of the target rectangle, as appropriate. Be sure to set the tracking rectangle before you make the menu visible. Youre also responsible for detecting, tracking, and displaying selections.

The UIResponderStandardEditActions informal protocol declares methods that are invoked when the user taps a menu command. The canPerformAction(_:withSender:) method of UIResponder is also related to the editing menu. A responder implements this method to enable and disable commands of the editing menu just before the menu is displayed. You can force the menu commands enabled state to update by calling the update() method.

You can also provide your own menu items via the menuItems property. When you modify the menu items, you can use the update() method to force the menu to update its display.

Topics

Getting the menu controller instance

class var shared: UIMenuController

Returns the menu controller.

Showing and hiding the menu

func showMenu(from: UIView, rect: CGRect)

func hideMenu(from: UIView)

func hideMenu()

var isMenuVisible: Bool

The visibility of the editing menu.

func setMenuVisible(Bool, animated: Bool)

Shows or hides the editing menu, optionally animating the action.

Positioning the menu

var menuFrame: CGRect

Returns the frame of the editing menu.

var arrowDirection: UIMenuController.ArrowDirection

The direction the arrow of the editing menu is pointing.

enum ArrowDirection

func setTargetRect(CGRect, in: UIView)

Sets the area in a view above or below which the editing menu is positioned.

Updating the menu

func update()

Updates the appearance and enabled state of menu commands.

Customizing menu items

var menuItems: [UIMenuItem]?

The custom menu items for the editing menu.

Notifications

class let willShowMenuNotification: NSNotification.Name

Posted by the menu controller just before it shows the menu.

class let didShowMenuNotification: NSNotification.Name

Posted by the menu controller just after it shows the menu.

class let willHideMenuNotification: NSNotification.Name

Posted by the menu controller just before it hides the menu.

class let didHideMenuNotification: NSNotification.Name

Posted by the menu controller just after it hides the menu.

class let menuFrameDidChangeNotification: NSNotification.Name

Posted when the frame of a visible menu changes.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uimenuitem

  • UIKit
  • UIMenuItem Deprecated

Class

UIMenuItem

A custom item in the editing menu managed by the menu controller.

iOS 3.216.0DeprecatediPadOS 3.216.0DeprecatedMac Catalyst 13.116.0DeprecatedvisionOS 1.01.0Deprecated

@MainActor class UIMenuItem

Overview

Custom menu items appear in the menu after any validated system items. A UIMenuItem object has two properties: a title and an action selector identifying the method to invoke in the handling responder object. Targets arent specified; a suitable target is found via normal traversal of the responder chain. To have custom menu items appear in the editing menu, you must add them to the menuItems property of the UIMenuController object.

Topics

Creating a menu item

init(title: String, action: Selector)

Creates and returns a menu-item object initialized with the given title and action.

Accessing menu-item attributes

var title: String

The title of the menu item.

var action: Selector

A selector identifying the method of the responder object to invoke for handling of the menu command.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uimutableusernotificationaction

  • UIKit
  • UIMutableUserNotificationAction Deprecated

Class

UIMutableUserNotificationAction

A modifiable version of the user notification action class.

iOS 8.010.0DeprecatediPadOS 8.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIMutableUserNotificationAction

Overview

When a notification is delivered, the system displays a button for each custom action associated with the notification. Tapping a button launches your app (either in the foreground or background) and gives you a chance to perform the indicated action. You use this class to configure the details about the button that is displayed and the information your app needs to perform the corresponding action.

To associate custom actions with a local or remote notification, create one or more instances of this class and use them to configure one or more UIMutableUserNotificationActionSettings objects. An action settings objects defines the set of actions to associate with a single notification. You register your apps action settings objects at launch time, along with your apps preferred notification options, using a UIUserNotificationSettings object.

For each action you define, you must specify whether execution of that action requires the app to be running in the foreground or background. You can also specify whether the device must be unlocked or can remain locked while the action is performed. Unlocking the device may be necessary if the action involves reading or writing files that are encrypted on disk using the systems data protection mechanism. When the user selects an action, the system puts your app into the appropriate mode and calls your app delegates application(_:handleActionWithIdentifier:forRemoteNotification:completionHandler:) or application(_:handleActionWithIdentifier:for:completionHandler:) method to perform the action.

Topics

Getting the action information

var identifier: String?

The string that you use internally to identify the action.

var title: String?

The localized string to use as the button title for the action.

Configuring the actions behavior

var activationMode: UIUserNotificationActivationMode

The mode in which to run the app when the action is performed.

var isAuthenticationRequired: Bool

A Boolean value indicating whether the user must unlock the device before the action is performed.

var isDestructive: Bool

A Boolean value indicating whether the action is destructive.

var behavior: UIUserNotificationActionBehavior

The custom behavior (if any) that the action supports.

var parameters: [AnyHashable : Any]

A dictionary of additional parameters to include with the action.

Relationships

Inherits From

  • UIUserNotificationAction

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSMutableCopying
  • NSObjectProtocol
  • NSSecureCoding

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uimutableusernotificationcategory

  • UIKit
  • UIMutableUserNotificationCategory Deprecated

Class

UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

iOS 8.010.0DeprecatediPadOS 8.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIMutableUserNotificationCategory

Overview

Use instances of this class to customize the actions included in an alert when space onscreen is constrained.

After creating an instance of this class using the standard alloc/init pattern, use it to modify the actions or category name as needed. The most common use of this class is to specify the subset of actions to display when the size of the alert is relatively small.

Topics

Modifying the action settings

var identifier: String?

The name of the action group.

func setActions([UIUserNotificationAction]?, for: UIUserNotificationActionContext)

Sets the actions to display for different alert styles.

Relationships

Inherits From

  • UIUserNotificationCategory

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSMutableCopying
  • NSObjectProtocol
  • NSSecureCoding

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uipopovercontroller


https://developer.apple.com/documentation/uikit/uipreviewaction

  • UIKit
  • UIPreviewAction Deprecated

Class

UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

iOS 9.013.0DeprecatediPadOS 9.013.0DeprecatedMac Catalyst 13.113.1DeprecatedtvOS 9.013.0Deprecated

@MainActor class UIPreviewAction

Overview

A peek quick action typically selects a deep link to your app and has a title, a style, and a handler. Peeks and peek quick actions are available on devices that support 3D Touch.

Topics

Creating a peek quick action

Creates a peek quick action using a specified title, style, and handler.

The block called when the peek quick action is selected by the user.

enum Style

The style for a peek quick action.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable
  • UIPreviewActionItem

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uipreviewactiongroup

  • UIKit
  • UIPreviewActionGroup Deprecated

Class

UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

iOS 9.013.0DeprecatediPadOS 9.013.0DeprecatedMac Catalyst 13.113.1DeprecatedtvOS 9.013.0Deprecated

@MainActor class UIPreviewActionGroup

Overview

When first displayed, the group appears as a single option in a peek quick action sheet. If the user selects the group, a submenu opens, displaying the child quick actions.

Topics

Creating a peek quick action group

convenience init(title: String, style: UIPreviewAction.Style, actions: [UIPreviewAction])

Creates a peek quick action group using a specified title, style, and array of peek quick actions.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable
  • UIPreviewActionItem

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uisearchdisplaycontroller

  • UIKit
  • UISearchDisplayController Deprecated

Class

UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

iOS 3.08.0DeprecatediPadOS 3.08.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UISearchDisplayController

Overview

You initialize a search display controller with a search bar and a view controller responsible for managing the data to be searched. When the user starts a search, the search display controller superimposes the search interface over the original view controllers view and shows the search results in its table view.

In addition to managing the searchable data, the original view controller typically plays four more roles you need to fill when using a search display controller. Those roles are the following:

  1. Data source for the search results table view ( searchResultsDataSource), which provides the data for the results table.

  2. Delegate for the search results table view ( searchResultsDelegate), which responds to the users selection of an item in the results table.

  3. Delegate for the search display controller ( delegate), which responds to events such the starting or ending of a search, and the showing or hiding of the search interface. As a convenience, this delegate may also be told about changes to the search string or search scope, so that the results table view can be reloaded.

  4. Delegate for the search bar ( delegate described in UISearchBar), which responds to changes in search criteria.

Typically, you initialize a search display controller from a view controller (usually an instance of UITableViewController) thats displaying a list. See the Simple UISearchBar with State Restoration sample code project for an example of how to configure a search display controller in Interface Builder. To perform configuration programmatically, set self for the search display controllers view controller and search results data source and delegate, as shown here:

searchController = [[UISearchDisplayController alloc]
initWithSearchBar:searchBar contentsController:self]; searchController.delegate = self; searchController.searchResultsDataSource = self; searchController.searchResultsDelegate = self;

If you follow this pattern, then in the table view data source and delegate methods you can check the methods table view argument to determine which table view is sending the message:

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

if (tableView == self.tableView) { return ...; } // If necessary (if self is the data source for other table views), // check whether tableView is searchController.searchResultsTableView. return ...; }

Starting in iOS 7.0, you can use a search display controller with a navigation bar (an instance of the UINavigationBar class) by configuring the search display controllers displaysSearchBarInNavigationBar and navigationItem properties.

Topics

init(searchBar: UISearchBar, contentsController: UIViewController)

Returns a display controller initialized with the given search bar and contents controller.

Displaying the search Interface

var isActive: Bool

The visibility state of the search interface.

func setActive(Bool, animated: Bool)

Displays or hides the search interface, optionally with animation.

var delegate: (any UISearchDisplayDelegate)?

The controllers delegate.

var searchBar: UISearchBar

The search bar.

var searchContentsController: UIViewController

The view controller that manages the contents being searched.

var searchResultsTableView: UITableView

The table view in which the search results are displayed.

var searchResultsDataSource: (any UITableViewDataSource)?

The data source for the table view in which the search results are displayed.

var searchResultsDelegate: (any UITableViewDelegate)?

The delegate for the table view in which the search results are displayed.

var searchResultsTitle: String?

The title for the search results view.

var displaysSearchBarInNavigationBar: Bool

Specifies that the navigation bar contains a search bar.

var navigationItem: UINavigationItem?

Represents the search display controller in a navigation controllers navigation bar.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uistoryboardpopoversegue

  • UIKit
  • UIStoryboardPopoverSegue Deprecated

Class

UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

iOS 5.09.0DeprecatediPadOS 5.09.0DeprecatedMac Catalyst 13.113.1DeprecatedtvOSDeprecated

@MainActor class UIStoryboardPopoverSegue

Overview

For popover segues, the destination view controller contains the content to be displayed in the popover. This class provides an additional popoverController property so that your custom code has access to the popover controller object. For example, you might want to store the popover controller elsewhere in your code so that you can dismiss the popover programmatically.

Topics

Accessing the segue attributes

var popoverController: UIPopoverController

The popover controller used to display the destination view controller.

Relationships

Inherits From

  • UIStoryboardSegue

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable
  • SendableMetatype

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uiusernotificationaction

  • UIKit
  • UIUserNotificationAction Deprecated

Class

UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

iOS 8.010.0DeprecatediPadOS 8.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIUserNotificationAction

Overview

When a notification is delivered, the system displays a button for each custom action associated with the notification. Tapping a button launches your app (either in the foreground or background) and gives you a chance to perform the indicated action. You use this class to specify the text that is displayed in the button and the information your app needs to perform the corresponding action.

Typically, you create an instance of the UIMutableUserNotificationAction class instead of this class. You use the mutable object to configure the action and then call the setActions:forContext: method of UIMutableUserNotificationActionSettings to add the resulting actions to a group.

For each action you define, you must specify whether execution of that action requires the app to be running in the foreground or background. You can also specify whether the device must be unlocked or can remain locked while the action is performed. Unlocking the device may be necessary if the action involves reading or writing files that are encrypted on disk using the systems data protection mechanism. When the user selects an action, the system puts your app into the appropriate mode and calls your app delegates application(_:handleActionWithIdentifier:forRemoteNotification:completionHandler:) or application(_:handleActionWithIdentifier:for:completionHandler:) method to perform the action.

Topics

Creating the action

init()

Creates a user notification action.

init?(coder: NSCoder)

Creates a user notification action from data in an unarchiver.

Getting the action information

var identifier: String?

The string that you use internally to identify the action.

var title: String?

The localized string to use as the button title for the action.

Getting the actions configuration

var activationMode: UIUserNotificationActivationMode

The mode in which to run the app when the action is performed.

var isAuthenticationRequired: Bool

A Boolean value indicating whether the user must unlock the device before the action is performed.

var isDestructive: Bool

A Boolean value indicating whether the action is destructive.

var behavior: UIUserNotificationActionBehavior

The custom behavior (if any) that the action supports.

var parameters: [AnyHashable : Any]

A dictionary of additional parameters to include with the action.

Constants

enum UIUserNotificationActivationMode

Constants indicating whether the app should activate to the foreground or background.

enum UIUserNotificationActionBehavior

Constants indicating additional behavior that the action supports.

Key to include among the parameters of the action.

Key related to action-related behaviors.

Relationships

Inherits From

  • NSObject

Inherited By

  • UIMutableUserNotificationAction

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSMutableCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationCategory

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uiusernotificationcategory

  • UIKit
  • UIUserNotificationCategory Deprecated

Class

UIUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

iOS 8.010.0DeprecatediPadOS 8.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIUserNotificationCategory

Overview

Each instance of UIUserNotificationCategory represents a group of actions to display in conjunction with a single notification. The title of each action is uses as the title of a button in the alert displayed to the user. When the user taps a button, the system reports the selected action to your app delegate.

Typically, you create an instance of the UIMutableUserNotificationCategory class instead of this class. You use the mutable object to add actions and specify a category name before registering them with a UIUserNotificationSettings object.

To display a group of actions for a specific notification, configure the local or push notification with the category name of the group. For local notifications, you specify this name when configuring your UILocalNotification object. For push notifications, your server specifies a group of actions by adding a category key (whose value is the identifier of the group) to the push notifications payload.

Topics

Creating the action group

init()

Creates an action group.

init?(coder: NSCoder)

Creates an action group from data in an unarchiver.

Getting the group configuration

var identifier: String?

The name of the action group.

Returns the actions to be displayed for the given notification context.

Constants

enum UIUserNotificationActionContext

Constants indicating the amount of space available for displaying actions in a notification.

Relationships

Inherits From

  • NSObject

Inherited By

  • UIMutableUserNotificationCategory

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSMutableCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.


https://developer.apple.com/documentation/uikit/uiusernotificationsettings

  • UIKit
  • UIUserNotificationSettings Deprecated

Class

UIUserNotificationSettings

The types of notifications that can be displayed to the user by your app.

iOS 8.010.0DeprecatediPadOS 8.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor class UIUserNotificationSettings

Overview

Apps that use visible or audible alerts in conjunction with a local or push notification must register the types of alerts they employ. UIKit correlates the information you provide with the users preferences to determine what types of alerts your app is allowed to employ.

Use this class to encapsulate your initial registration request and to view the request results. After creating an instance of this class and specifying your preferred settings, call the registerUserNotificationSettings(_:) method of the UIApplication class to register those settings. After checking your request against the user preferences, the app delivers the results to the application(_:didRegister:) method of its app delegate. The object passed to that method specifies the types of notifications that your app is allowed to use.

In addition to registering your apps alert types, you can also use this class to register groups of custom actions to display in conjunction with local or push notifications. Custom actions represent immediate tasks your app can perform in response to the notification. You define groups of actions and associate the entire group with a given notification. When the corresponding alert is displayed, the system adds buttons for each action you specified. When the user taps the button for one of the actions, the system wakes your app and calls the application(_:handleActionWithIdentifier:forRemoteNotification:completionHandler:) or application(_:handleActionWithIdentifier:for:completionHandler:) method of its app delegate. Use those methods to perform the requested action.

Topics

Creating a settings object

Creates and returns a settings object that you can use to register your requested notification and action types.

Getting the configured settings

var types: UIUserNotificationType

A bitmask of the notification types that your app is allowed to use.

The apps registered groups of actions.

Constants

struct UIUserNotificationType

Constants indicating how the app alerts the user when a local or push notification arrives.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Deprecated classes

class UIActionSheet

A view that presents a set of alternatives for how to proceed with a task.

Deprecated

class UIAlertView

A view that displays an alert message.

class UIDocumentMenuViewController

A list of all the available document providers for a given file type and mode, in addition to custom menu items that you add.

class UILocalNotification

A notification that an app can schedule for presentation at a specific date and time.

class UIMenuController

The menu interface for the Cut, Copy, Paste, Select, Select All, and Delete commands.

class UIMenuItem

A custom item in the editing menu managed by the menu controller.

class UIMutableUserNotificationAction

A modifiable version of the user notification action class.

class UIMutableUserNotificationCategory

Information about custom actions that your app can perform in response to a local or push notification.

class UIPopoverController

An object that manages the presentation of content in a popover.

class UIPreviewAction

A preview action, or peek quick action, that displays below a peek when a user swipes the peek upward.

class UIPreviewActionGroup

A group of one or more child quick actions, each an instance of the preview action class.

class UISearchDisplayController

An object that manages the display of a search bar, along with a table view that displays search results.

class UIStoryboardPopoverSegue

A specific type of segue for presenting content in a popover.

class UIUserNotificationAction

A custom action that your app can perform in response to a remote or local notification.

class UIUserNotificationCategory


https://developer.apple.com/documentation/uikit/uiaccelerometerdelegate

  • UIKit
  • UIAccelerometerDelegate Deprecated

Protocol

UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

iOS 2.013.0DeprecatediPadOS 2.013.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor protocol UIAccelerometerDelegate : NSObjectProtocol

Relationships

Inherits From

  • NSObjectProtocol

See Also

Deprecated protocols

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

Deprecated

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.


https://developer.apple.com/documentation/uikit/uiactionsheetdelegate

  • UIKit
  • UIActionSheetDelegate Deprecated

Protocol

UIActionSheetDelegate

The interface for the delegate of an action sheet object.

iOSiPadOSMac CatalystvisionOS

@MainActor protocol UIActionSheetDelegate : NSObjectProtocol

Overview

The delegate implements the button actions and any other custom behavior. Some of the methods defined in this protocol are optional.

If you add your own buttons or customize the behavior of an action sheet, implement a delegate conforming to this protocol to handle the corresponding delegate messages. Use the delegate property of the action sheet object to specify one of your application objects as the delegate.

If you add your own buttons to an action sheet, the delegate must implement the actionSheet(_:clickedButtonAt:) message to respond when those buttons are clicked; otherwise, your custom buttons do nothing. The action sheet is automatically dismissed after the actionSheet(_:clickedButtonAt:) delegate method is invoked.

Optionally, you can implement the actionSheetCancel(_:) method to take the appropriate action when the system cancels your action sheet. If the delegate does not implement this method, the default behavior is to simulate the user clicking the cancel button and closing the view.

You can also optionally augment the behavior of presenting and dismissing action sheets using the methods in Customizing behavior.

Topics

Responding to actions

func actionSheet(UIActionSheet, clickedButtonAt: Int)

Sent to the delegate when the user clicks a button on an action sheet.

Customizing behavior

func willPresent(UIActionSheet)

Sent to the delegate before an action sheet is presented to the user.

func didPresent(UIActionSheet)

Sent to the delegate after an action sheet is presented to the user.

func actionSheet(UIActionSheet, willDismissWithButtonIndex: Int)

Sent to the delegate before an action sheet is dismissed.

func actionSheet(UIActionSheet, didDismissWithButtonIndex: Int)

Sent to the delegate after an action sheet is dismissed from the screen.

Canceling

func actionSheetCancel(UIActionSheet)

Sent to the delegate before an action sheet is canceled.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIDocumentInteractionController

See Also

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

Deprecated

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.


https://developer.apple.com/documentation/uikit/uialertviewdelegate

  • UIKit
  • UIAlertViewDelegate Deprecated

Protocol

UIAlertViewDelegate

The interface for the delegate of an alert view object.

iOSiPadOSMac Catalyst

@MainActor protocol UIAlertViewDelegate : NSObjectProtocol

Overview

The delegate implements the button actions and any other custom behavior. Some of the methods defined in this protocol are optional.

If you add your own buttons or customize the behavior of an alert view, implement a delegate conforming to this protocol to handle the corresponding delegate messages. Use the delegate property of an alert view to specify one of your application objects as the delegate.

If you add your own buttons to an alert view, the delegate must implement the alertView(_:clickedButtonAt:) message to respond when those buttons are clicked; otherwise, your custom buttons do nothing. The alert view is automatically dismissed after the alertView(_:clickedButtonAt:) delegate method is invoked.

Optionally, you can implement the alertViewCancel(_:) method to take the appropriate action when the system cancels your alert view. If the delegate doesnt implement this method, the default behavior is to simulate the user clicking the cancel button and closing the view.

You can also optionally augment the behavior of presenting and dismissing alert views using the methods in Customizing behavior.

Topics

Responding to actions

func alertView(UIAlertView, clickedButtonAt: Int)

Sent to the delegate when the user clicks a button on an alert view.

Customizing behavior

Sent to the delegate to determine whether the first non-cancel button in the alert should be enabled.

func willPresent(UIAlertView)

Sent to the delegate before a model view is presented to the user.

func didPresent(UIAlertView)

Sent to the delegate after an alert view is presented to the user.

func alertView(UIAlertView, willDismissWithButtonIndex: Int)

Sent to the delegate before an alert view is dismissed.

func alertView(UIAlertView, didDismissWithButtonIndex: Int)

Sent to the delegate after an alert view is dismissed from the screen.

Canceling

func alertViewCancel(UIAlertView)

Sent to the delegate before an alert view is canceled.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

Deprecated

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.


https://developer.apple.com/documentation/uikit/uipopovercontrollerdelegate

  • UIKit
  • UIPopoverControllerDelegate Deprecated

Protocol

UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIPopoverControllerDelegate : NSObjectProtocol

Overview

Popover controllers notify their delegate whenever user interactions would cause the dismissal of the popover and, in some cases, give the user a chance to prevent that dismissal.

For more information about the UIPopoverController class, see UIPopoverController.

Topics

Responding to popover position changes

Tells the delegate that the popover controller needs to change the popovers location in its view.

Managing the popovers dismissal

Asks the delegate if the popover should be dismissed.

func popoverControllerDidDismissPopover(UIPopoverController)

Tells the delegate that the popover was dismissed.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

Deprecated

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.


https://developer.apple.com/documentation/uikit/uisearchdisplaydelegate

  • UIKit
  • UISearchDisplayDelegate Deprecated

Protocol

UISearchDisplayDelegate

The interface for the delegate of a search display controller.

iOSiPadOSMac Catalyst

@MainActor protocol UISearchDisplayDelegate : NSObjectProtocol

Overview

This protocol defines delegate methods for UISearchDisplayController objects.

Topics

Responding to search state change

func searchDisplayControllerWillBeginSearch(UISearchDisplayController)

Tells the delegate that the controller is about to begin searching.

func searchDisplayControllerDidBeginSearch(UISearchDisplayController)

Tells the delegate that the controller has started searching.

func searchDisplayControllerWillEndSearch(UISearchDisplayController)

Tells the delegate that the controller is about to end searching.

func searchDisplayControllerDidEndSearch(UISearchDisplayController)

Tells the delegate that the controller has finished searching.

Loading and unloading the table view

func searchDisplayController(UISearchDisplayController, didLoadSearchResultsTableView: UITableView)

Tells the delegate that the controller has loaded its table view.

func searchDisplayController(UISearchDisplayController, willUnloadSearchResultsTableView: UITableView)

Tells the delegate that the controller is about to unload its table view.

Showing and hiding the table view

func searchDisplayController(UISearchDisplayController, willShowSearchResultsTableView: UITableView)

Tells the delegate that the controller is about to display its table view.

func searchDisplayController(UISearchDisplayController, didShowSearchResultsTableView: UITableView)

Tells the delegate that the controller just displayed its table view.

func searchDisplayController(UISearchDisplayController, willHideSearchResultsTableView: UITableView)

Tells the delegate that the controller is about to hide its table view.

func searchDisplayController(UISearchDisplayController, didHideSearchResultsTableView: UITableView)

Tells the delegate that the controller just hid its table view.

Responding to changes in search criteria

Asks the delegate if the table view should be reloaded for a given search string.

Asks the delegate if the table view should be reloaded for a given scope.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

Deprecated

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.


https://developer.apple.com/documentation/uikit/uiviewcontrollerpreviewing

  • UIKit
  • UIViewControllerPreviewing Deprecated

Protocol

UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIViewControllerPreviewing : NSObjectProtocol

Overview

The system returns a context object conforming to this protocol when you call a view controllers registerForPreviewing(with:sourceView:) method. This method registers the view controller to participate in 3D Touch preview (peek) and commit (pop) behaviors.

To learn about 3D Touch, read Adopting 3D Touch on iPhone.

Topics

Configuring a source view for a 3D Touch previewing view controller

var sourceRect: CGRect

The rectangle, in the source views coordinate system, that responds to a 3D Touch by a user and remains visually sharp while surrounding content blurs.

Required

var previewingGestureRecognizerForFailureRelationship: UIGestureRecognizer

A gesture recognizer suitable for setting up failure requirements for a previews (peeks) gestures.

Accessing properties of a 3D Touch previewing view controller

var delegate: any UIViewControllerPreviewingDelegate

The previewing view controllers delegate for managing preview (peek) and commit (pop) view controllers.

var sourceView: UIView

A source view, in a previewing view controllers view hierarchy, responds to a 3D Touch by the user.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

Deprecated

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.


https://developer.apple.com/documentation/uikit/uiviewcontrollerpreviewingdelegate

  • UIKit
  • UIViewControllerPreviewingDelegate Deprecated

Protocol

UIViewControllerPreviewingDelegate

A set of methods used by the delegate to respond, with a preview view controller and a commit view controller, to the user pressing a view object on the screen of a device that supports 3D Touch.

@MainActor protocol UIViewControllerPreviewingDelegate : NSObjectProtocol

Overview

To learn about 3D Touch, read Adopting 3D Touch on iPhone.

Topics

Providing preview and commit views for 3D Touch

Called when the user has pressed a source view in a previewing view controller, thereby obtaining a surrounding blur to indicate that a preview (peek) is available.

Required

func previewingContext(any UIViewControllerPreviewing, commit: UIViewController)

Called to let you prepare the presentation of a commit (pop) view from your commit view controller.

Relationships

Inherits From

  • NSObjectProtocol

See Also

Deprecated protocols

protocol UIAccelerometerDelegate

The interface for receiving acceleration-related data from the system.

Deprecated

protocol UIActionSheetDelegate

The interface for the delegate of an action sheet object.

protocol UIAlertViewDelegate

The interface for the delegate of an alert view object.

protocol UIPopoverControllerDelegate

The interface for the delegate of a popover controller object.

protocol UISearchDisplayDelegate

The interface for the delegate of a search display controller.

protocol UIViewControllerPreviewing

A set of methods that define the interface for configuring a previewing view controller on devices that support 3D Touch.


https://developer.apple.com/documentation/uikit/uistatusbaranimation


https://developer.apple.com/documentation/uikit/uiapplicationmain(::::)-9jjn8


https://developer.apple.com/documentation/uikit/implementing-peek-and-pop

  • UIKit
  • Deprecated symbols
  • Implementing Peek and Pop

Sample Code

Implementing Peek and Pop

Accelerate actions in your app by providing shortcuts to preview content in detail view controllers.

Download

Xcode 10.2+

Overview

This sample project demonstrates previewing content and providing quick shortcuts to functionality using Peek and Pop APIs. The app uses a table view to display a list of colors and tapping any row in the table navigates to a detail view controller showing the color. The app uses 3D Touch on the table view rows to allow users to peek at the content without placing it on the navigation stack.

Colors can also be starred or unstarred. Starred colors are shown with a solid filled colored star icon to the left of the name and unstarred colors have a hollow star. Users can toggle whether a color is starred using one of two methods: they can either tap a button in the navigation bar of the detail view, or use 3D Touch to peek at the content. Swiping up while in 3D Touch lets the user access a Peek Quick Action.

The app uses a tab bar controller to demonstrate two different methods for implementing Peek and Pop. The first tab contains the ColorsViewControllerStoryboard view controller, which configures Peek and Pop using the segue in Main.storyboard. The second tab contains the ColorsViewControllerCode view controller to achieve the same functionality, but in code.

Both ColorsViewControllerStoryboard and ColorsViewControllerCode are subclasses of ColorsViewControllerBase, which contains the implementation of everything necessary to display the table view and handle the standard segue.

Peek and Pop from a storyboard

The storyboard uses a Show segue with Peek and Pop enabled to navigate from the ColorViewControllerStoryboard to ColorItemViewController. This is done by selecting the Show segue, and turning on “Preview & Commit Segues” next to Peek & Pop in the Attributes inspector.

When configuring the ColorItemViewController, enable the “Use Preferred Explicit Size” option in the View Controller section of the Attributes inspector. Set the “Content Size” to have 0 width and an appropriate height. Zero width configures the view controller to automatically resize to the device width when the user peeks at the content.

When implementing the ColorsViewControllerBase view controller, resist the temptation of using either indexPathForSelectedRow or indexPathsForSelectedRows when preparing to execute a segue. If you configure the storyboard with the default implementation of Peek and Pop, these methods return nil at the time of segue execution. Instead, use the segues sender property to access the cell initiating the peek.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let selectedTableViewCell = sender as? UITableViewCell, let indexPath = tableView.indexPath(for: selectedTableViewCell) else { preconditionFailure("Expected sender to be a valid table view cell") }

guard let colorItemViewController = segue.destination as? ColorItemViewController else { preconditionFailure("Expected a ColorItemViewController") }

// Pass over a reference to the ColorData object and the specific ColorItem being viewed. colorItemViewController.colorData = colorData colorItemViewController.colorItem = colorData.colors[indexPath.row] }

Peek and Pop in code

The ColorsViewControllerCode view controller adds code to manually register for Peek and Pop instead of using the storyboard to customize the segue. Call registerForPreviewing(with:sourceView:) to register a class which implements the UIViewControllerPreviewingDelegate protocol, and then pass in a view which responds to the 3D Touch.

override func viewDidLoad() { super.viewDidLoad()

registerForPreviewing(with: self, sourceView: tableView) }

The protocol requires the implementation of two methods. When the system detects the 3D Touch, it calls previewingContext(_:viewControllerForLocation:), passing a previewingContext object that conforms to the UIViewControllerPreviewing protocol. Use this method to configure and pass back a view controller for the peek.

// First, get the index path and view for the previewed cell. guard let indexPath = tableView.indexPathForRow(at: location), let cell = tableView.cellForRow(at: indexPath) else { return nil }

// Enable blurring of other UI elements, and a zoom in animation while peeking. previewingContext.sourceRect = cell.frame

// Create and configure an instance of the color item view controller to show for the peek. guard let viewController = storyboard?.instantiateViewController(withIdentifier: "ColorItemViewController") as? ColorItemViewController else { preconditionFailure("Expected a ColorItemViewController") }

// Pass over a reference to the ColorData object and the specific ColorItem being viewed. viewController.colorData = colorData viewController.colorItem = colorData.colors[indexPath.row]

return viewController }

When the system detects enough pressure in the 3D Touch to pop the view controller, it calls previewingContext(_:commit:). Take the passed in view controller and present to the user.

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { // Push the configured view controller onto the navigation stack. navigationController?.pushViewController(viewControllerToCommit, animated: true) }

Implement Peek Quick Actions

To enable Peek Quick Actions for the ColorItemViewController, you must override the default implementation of the previewActionItems property to return an array of UIPreviewAction or UIPreviewActionGroup objects.

Both a star/unstar action and a delete action are available as quick actions using the following code:

override var previewActionItems: [UIPreviewActionItem] { let starAction = UIPreviewAction(title: starButtonTitle(), style: .default, handler: { [unowned self] (_, _) in guard let colorItem = self.colorItem else { preconditionFailure("Expected a color item") }

colorItem.starred.toggle() })

let deleteAction = UIPreviewAction(title: "Delete", style: .destructive) { [unowned self] (_, _) in guard let colorData = self.colorData else { preconditionFailure("Expected a reference to the color data container") }

guard let colorItem = self.colorItem else { preconditionFailure("Expected a color item") }

colorData.delete(colorItem) }

return [ starAction, deleteAction ] }

The star/unstar action is shown with a default style and the delete action is shown as being destructive.

Its important to ensure that your apps features are still available to devices that do not support 3D Touch. In this sample, both the star/unstar and the delete functionality remain available by navigating into the ColorItemViewController and tapping buttons in the navigation bar. The Peek Quick Action provides a more convenient way to access that feature.


https://developer.apple.com/documentation/uikit/uiactionsheet)


https://developer.apple.com/documentation/uikit/uialertview)


https://developer.apple.com/documentation/uikit/uidocumentmenuviewcontroller)


https://developer.apple.com/documentation/uikit/uilocalnotification)


https://developer.apple.com/documentation/uikit/uimenucontroller)


https://developer.apple.com/documentation/uikit/uimenuitem)


https://developer.apple.com/documentation/uikit/uimutableusernotificationaction)


https://developer.apple.com/documentation/uikit/uimutableusernotificationcategory)


https://developer.apple.com/documentation/uikit/uipopovercontroller)


https://developer.apple.com/documentation/uikit/uipreviewaction)


https://developer.apple.com/documentation/uikit/uipreviewactiongroup)


https://developer.apple.com/documentation/uikit/uisearchdisplaycontroller)


https://developer.apple.com/documentation/uikit/uistoryboardpopoversegue)


https://developer.apple.com/documentation/uikit/uiusernotificationaction)


https://developer.apple.com/documentation/uikit/uiusernotificationcategory)


https://developer.apple.com/documentation/uikit/uiusernotificationsettings)


https://developer.apple.com/documentation/uikit/uiaccelerometerdelegate)


https://developer.apple.com/documentation/uikit/uiactionsheetdelegate)


https://developer.apple.com/documentation/uikit/uialertviewdelegate)


https://developer.apple.com/documentation/uikit/uipopovercontrollerdelegate)


https://developer.apple.com/documentation/uikit/uisearchdisplaydelegate)


https://developer.apple.com/documentation/uikit/uiviewcontrollerpreviewing)


https://developer.apple.com/documentation/uikit/uiviewcontrollerpreviewingdelegate)


https://developer.apple.com/documentation/uikit/uistatusbaranimation)


https://developer.apple.com/documentation/uikit/uiapplicationmain(::::)-9jjn8)


https://developer.apple.com/documentation/uikit/implementing-peek-and-pop)


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/componentkey

  • UIKit
  • UITextFormattingViewController
  • UITextFormattingViewController.ComponentKey

Structure

UITextFormattingViewController.ComponentKey

struct ComponentKey

Topics

Initializers

init(rawValue: String)

Relationships

Conforms To

  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Data Types

struct Highlight

struct TextAlignment

struct TextList

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/highlight

  • UIKit
  • UITextFormattingViewController
  • UITextFormattingViewController.Highlight

Structure

UITextFormattingViewController.Highlight

struct Highlight

Topics

Initializers

init(rawValue: String)

Relationships

Conforms To

  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Data Types

struct ComponentKey

struct TextAlignment

struct TextList

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/textalignment

  • UIKit
  • UITextFormattingViewController
  • UITextFormattingViewController.TextAlignment

Structure

UITextFormattingViewController.TextAlignment

struct TextAlignment

Topics

Initializers

init(nsTextAlignment: NSTextAlignment)

init(rawValue: String)

Instance Properties

var nsTextAlignment: NSTextAlignment

Relationships

Conforms To

  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Data Types

struct ComponentKey

struct Highlight

struct TextList

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/textlist

  • UIKit
  • UITextFormattingViewController
  • UITextFormattingViewController.TextList

Structure

UITextFormattingViewController.TextList

struct TextList

Topics

Initializers

init(rawValue: String)

Relationships

Conforms To

  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Data Types

struct ComponentKey

struct Highlight

struct TextAlignment

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/componentkey)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/highlight)


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/textalignment)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/textlist)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiaccessibility/expandedstatus

  • UIKit
  • UIAccessibility
  • UIAccessibility.ExpandedStatus

Enumeration

UIAccessibility.ExpandedStatus

enum ExpandedStatus

Topics

Enumeration Cases

case collapsed

case expanded

case unsupported

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Enumerations

enum ComponentSize

enum UIFocusItemDeferralMode


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/componentsize

  • UIKit
  • UITextFormattingViewController
  • UITextFormattingViewController.ComponentSize

Enumeration

UITextFormattingViewController.ComponentSize

enum ComponentSize

Topics

Enumeration Cases

case automatic

case extraLarge

case large

case mini

case regular

case small

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Enumerations

enum ExpandedStatus

enum UIFocusItemDeferralMode

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uifocusitemdeferralmode

  • UIKit
  • UIFocusItemDeferralMode

Enumeration

UIFocusItemDeferralMode

enum UIFocusItemDeferralMode

Topics

Enumeration Cases

case always

Always defer focus for this item, even if deferral is disabled right now. This means a programmatic update to this item would result in focus disappearing until the user interacts with the focus engine again.

case automatic

Use the system default behavior.

case never

Never defer focus for this item. When a programmatic focus update lands on this item, it will always be and appear focused even if focus deferral is currently enabled.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Enumerations

enum ExpandedStatus

enum ComponentSize


https://developer.apple.com/documentation/uikit/uiaccessibility/expandedstatus)


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller/componentsize)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uifocusitemdeferralmode)


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct/init(_:)

#app-main)

  • UIKit
  • UIConfigurationTextAttributesTransformer
  • init(_:)

Initializer

init(_:)

Creates a new text attributes transformer.

Mac CatalystvisionOS

Parameters

transform

A closure that defines the text transformation.


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct/transform

  • UIKit
  • UIConfigurationTextAttributesTransformer
  • transform

Instance Property

transform

A closure that defines the text transformation.

Mac CatalystvisionOS

Discussion

This closure accepts a container with the current text attributes and returns a container with the new text attributes.


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct/callasfunction(_:)

#app-main)

  • UIKit
  • UIConfigurationTextAttributesTransformer
  • callAsFunction(_:)

Instance Method

callAsFunction(_:)

Calls the transform closure of the text attributes transformer.

Mac CatalystvisionOS

Parameters

input

The current attributes container for a string.

Return Value

A new, transformed attributes container.

Discussion

Using this syntax, you can call the text attributes transformer type as if it were a closure:

var container = AttributeContainer() container.backgroundColor = UIColor.blue let transformer = UIConfigurationTextAttributesTransformer { incoming in var outgoing = incoming outgoing.backgroundColor = incoming.backgroundColor?.withAlphaComponent(0.6) return outgoing } let transformed = transformer.callAsFunction(container)


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/title

  • UIKit
  • UIButton
  • UIButton.Configuration
  • title

Instance Property

title

The text of the title label the button displays.

Mac CatalystvisionOS

var title: String? { get set }

Discussion

This property matches the string value of the attributedTitle property. To change the button title when the button state changes, use configurationUpdateHandler or updateConfiguration().

See Also

Configuring titles

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/subtitle


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/attributedtitle

  • UIKit
  • UIButton
  • UIButton.Configuration
  • attributedTitle

Instance Property

attributedTitle

The text and style attributes for the buttons title label.

Mac CatalystvisionOS

var attributedTitle: AttributedString? { get set }

Discussion

The configuration sets the title property to match the string value of this attributed string. To change the button title when the button state changes, use configurationUpdateHandler or updateConfiguration().

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/attributedsubtitle

  • UIKit
  • UIButton
  • UIButton.Configuration
  • attributedSubtitle

Instance Property

attributedSubtitle

The text and style attributes for the buttons subtitle label.

Mac CatalystvisionOS

var attributedSubtitle: AttributedString? { get set }

Discussion

The configuration sets the subtitle property to match the string value of this attributed string. To change the button subtitle when the button state changes, use configurationUpdateHandler or updateConfiguration().

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titletextattributestransformer

  • UIKit
  • UIButton
  • UIButton.Configuration
  • titleTextAttributesTransformer

Instance Property

titleTextAttributesTransformer

A structure to update the attributed title when the button state changes.

Mac CatalystvisionOS

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer? { get set }

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/subtitletextattributestransformer

  • UIKit
  • UIButton
  • UIButton.Configuration
  • subtitleTextAttributesTransformer

Instance Property

subtitleTextAttributesTransformer

A structure to update the attributed subtitle when the button state changes.

Mac CatalystvisionOS

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer? { get set }

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlepadding

  • UIKit
  • UIButton
  • UIButton.Configuration
  • titlePadding

Instance Property

titlePadding

The distance between the title and subtitle labels.

Mac CatalystvisionOS

var titlePadding: CGFloat { get set }

Discussion

The title padding adjusts the distance between the title and subtitle labels.

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titleAlignment: UIButton.Configuration.TitleAlignment

The text alignment the button uses to lay out the title and subtitle.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlealignment-swift.property

  • UIKit
  • UIButton
  • UIButton.Configuration
  • titleAlignment

Instance Property

titleAlignment

The text alignment the button uses to lay out the title and subtitle.

Mac CatalystvisionOS

var titleAlignment: UIButton.Configuration.TitleAlignment { get set }

Discussion

The title aligment can align the title and subtitle labels along the leading or trailing edges, or center them relative to each other.

See Also

Configuring titles

var title: String?

The text of the title label the button displays.

var subtitle: String?

The text the subtitle label of the button displays.

var attributedTitle: AttributedString?

The text and style attributes for the buttons title label.

var attributedSubtitle: AttributedString?

The text and style attributes for the buttons subtitle label.

var titleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed title when the button state changes.

var subtitleTextAttributesTransformer: UIConfigurationTextAttributesTransformer?

A structure to update the attributed subtitle when the button state changes.

struct UIConfigurationTextAttributesTransformer

Defines a text transformation that can affect the visual appearance of a string.

var titlePadding: CGFloat

The distance between the title and subtitle labels.

enum TitleAlignment

Specifies how to align a buttons title and subtitle.

var titleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons title.

var subtitleLineBreakMode: NSLineBreakMode

The line break mode the button uses to lay out the buttons subtitle.


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlealignment-swift.enum


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlelinebreakmode


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/subtitlelinebreakmode


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct/init(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct/transform)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiconfigurationtextattributestransformer-swift.struct/callasfunction(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/title)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/subtitle)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/attributedtitle)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/attributedsubtitle)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titletextattributestransformer)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/subtitletextattributestransformer)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlepadding)


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlealignment-swift.property)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlealignment-swift.enum)


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/titlelinebreakmode)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibutton/configuration-swift.struct/subtitlelinebreakmode)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uideviceorientationislandscape(_:)


https://developer.apple.com/documentation/uikit/uideviceorientationisportrait(_:)

#app-main)

  • UIKit
  • UIDeviceOrientationIsPortrait(_:)

Function

UIDeviceOrientationIsPortrait(_:)

iOSiPadOSMac CatalystvisionOS

See Also


https://developer.apple.com/documentation/uikit/uideviceorientationisvalidinterfaceorientation(_:)


https://developer.apple.com/documentation/uikit/uiinterfaceorientationislandscape(_:)


https://developer.apple.com/documentation/uikit/uiinterfaceorientationisportrait(_:)

#app-main)

  • UIKit
  • UIInterfaceOrientationIsPortrait(_:)

Function

UIInterfaceOrientationIsPortrait(_:)

iOSiPadOSMac CatalystvisionOS

See Also


https://developer.apple.com/documentation/uikit/uiwritingtoolscoordinatortextanimationdebugdescription(_:)

#app-main)

  • UIKit
  • UIWritingToolsCoordinatorTextAnimationDebugDescription(_:)

Function

UIWritingToolsCoordinatorTextAnimationDebugDescription(_:)

See Also


https://developer.apple.com/documentation/uikit/uideviceorientationislandscape(_:))


https://developer.apple.com/documentation/uikit/uideviceorientationisportrait(_:))


https://developer.apple.com/documentation/uikit/uideviceorientationisvalidinterfaceorientation(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiinterfaceorientationislandscape(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiinterfaceorientationisportrait(_:))


https://developer.apple.com/documentation/uikit/uiwritingtoolscoordinatortextanimationdebugdescription(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/optimizing-your-ipad-app-for-mac).


https://developer.apple.com/documentation/uikit/customizing-a-document-based-app-s-launch-experience


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller

  • UIKit
  • UIDocumentBrowserViewController

Class

UIDocumentBrowserViewController

A view controller for browsing and performing actions on documents that you store locally and in the cloud.

@MainActor class UIDocumentBrowserViewController

Mentioned in

Providing access to directories

Customizing the browser

Overview

With the document browser view controller, users can easily access and view their documents in the cloud. By default, the document browser can access both the systems local file provider and its iCloud file provider.

The local file provider grants access to all the documents in the apps Documents directory. Users can also access documents from another apps Documents directory, if that app declares either the UISupportsDocumentBrowser key, or both the UIFileSharingEnabled and LSSupportsOpeningDocumentsInPlace keys in its Info.plist file. When the user opens a document from another apps Documents directory, they edit the document in place, and save the changes to the other apps Documents directory.

The iCloud file provider creates a folder for your app in the users iCloud Drive. Users can access documents from this folder, or from anywhere in their iCloud Drive. The system automatically handles access to iCloud for you, so you dont need to enable your apps iCloud capabilities.

Third-party storage services can also provide access to the documents they manage by implementing a File Provider extension (iOS 11 or later). For more information, see File Provider.

Topics

Creating a document browser

Give users access to their local or remote documents from within your app.

init(forOpening: [UTType]?)

Initializes and returns a document browser view controller that can open the specified file types.

Creating new documents

var activeDocumentCreationIntent: UIDocument.CreationIntent?

The current intent that defines how your app creates a document.

Responding to browser events

var delegate: (any UIDocumentBrowserViewControllerDelegate)?

The document browsers delegate.

protocol UIDocumentBrowserViewControllerDelegate

The protocol you implement to respond as the user interacts with the document browser.

Imports a document into the same location as an existing document.

Configuring a document browser

var allowsDocumentCreation: Bool

A Boolean value that determines whether the document browser can create new documents.

var allowsPickingMultipleItems: Bool

A Boolean value that determines whether the user can select and open more than one document at a time.

Reveals, and optionally imports, the document at the provided URL.

var contentTypesForRecentDocuments: [UTType]

Content types for browsing recent documents.

Modifying the browsers appearance

var browserUserInterfaceStyle: UIDocumentBrowserViewController.BrowserUserInterfaceStyle

The visual style for the document browser.

enum BrowserUserInterfaceStyle

Styles that define the document browsers appearance.

var additionalLeadingNavigationBarButtonItems: [UIBarButtonItem]

Additional bar button items that the document browser displays on the leading side of its navigation bar.

var additionalTrailingNavigationBarButtonItems: [UIBarButtonItem]

Additional bar button items that the document browser displays on the trailing side of its navigation bar.

var shouldShowFileExtensions: Bool

A Boolean value that determines whether the browser always shows file extensions.

var localizedCreateDocumentActionTitle: String

The title for the Create Document button.

var defaultDocumentAspectRatio: CGFloat

The aspect ratio for the Create Document button.

Adding custom actions

var customActions: [UIDocumentBrowserAction]

Custom document browser actions.

class UIDocumentBrowserAction

A custom action that you can create and add to a document browsers Edit menu or navigation bar.

Animating transitions

Creates a transition controller that provides the standard system-loading and segue animations for the document browser.

class UIDocumentBrowserTransitionController

An object that implements the standard loading and transition animations for a document browser.

Renaming a document

Renames a document at the specified URL.

Handling errors

struct UIDocumentBrowserError

A structure that contains information about document browser errors.

enum Code

The error codes for document browser errors.

let UIDocumentBrowserErrorDomain: String

The error domain for document browser errors.

Deprecated symbols

init(forOpeningFilesWithContentTypes: [String]?)

Deprecated

var recentDocumentsContentTypes: [String]

var allowedContentTypes: [String]

The document types that the browser can open.

Relationships

Inherits From

  • UIViewController

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSExtensionRequestHandling
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIActivityItemsConfigurationProviding
  • UIAppearanceContainer
  • UIContentContainer
  • UIFocusEnvironment
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIStateRestoring
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Documents and directories

Customizing a document-based apps launch experience

Add unique elements to your apps document launch scene.

Use a document picker to access the content of a directory outside your apps container.

Building a document browser-based app

Use a document browser to provide access to the users text files.

Building a document browser app for custom file formats

Implement a custom document file format to manage user interactions with files on different cloud storage providers.

class UIDocumentViewController

A view controller that manages and presents a document stored locally or in the cloud.

class UIDocumentPickerViewController

A view controller that provides access to documents or destinations outside your apps sandbox.

class UIDocumentInteractionController

A view controller that previews, opens, or prints files with a file format that your app cant handle directly.


https://developer.apple.com/documentation/uikit/uidocument/init(fileurl:)

#app-main)

  • UIKit
  • UIDocument
  • init(fileURL:)

Initializer

init(fileURL:)

Returns a document object initialized with its file-system location.

@MainActor init(fileURL url: URL)

Parameters

url

A file URL identifying the location in the application sandbox where document data is to be written. Passing in nil or an empty URL results in the throwing of an invalidArgumentException.

Return Value

A UIDocument object or nil if the object could not be created.

Discussion

After you create a document object and no file exists for it yet, you should next call the save(to:for:completionHandler:) to write the document to its file-system location in the application sandbox. If url locates an existing document file, call open(completionHandler:) after creating the document object. The second parameter of this method, the save operation constant, should be UIDocument.SaveOperation.forCreating when there is no document file yet. In the completion handler, if you want the document to be automatically synced with other devices you should ensure that its URL is based in a ubiquitous container; see Designing for Documents in iCloud for more information.

See Also

var fileURL: URL

The file URL you use to initialize the document.


https://developer.apple.com/documentation/uikit/uidocument/filetype

  • UIKit
  • UIDocument
  • fileType

Instance Property

fileType

The file type of the document.

@MainActor var fileType: String? { get }

Discussion

The file type is a uniform type identifier (UTI). UIKit derives the UTI from the filename-extension component of fileURL.

UIKit sets this property before it calls the completion handlers of the open(completionHandler:), save(to:for:completionHandler:), and revert(toContentsOf:completionHandler:). If, outside of these methods or their completion handlers, you want to wait for any pending file operations to complete before you access this property, you can call performAsynchronousFileAccess(_:) and access the property value in the block parameter.

See Also

Accessing document attributes

var fileURL: URL

The file URL you use to initialize the document.

var localizedName: String

The localized name of the document.

var fileModificationDate: Date?

The date and time your app last modified the document file.

var documentState: UIDocument.State

The current state of the document.

var progress: Progress?

The upload or download progress of a document.


https://developer.apple.com/documentation/uikit/uidocument/localizedname

  • UIKit
  • UIDocument
  • localizedName

Instance Property

localizedName

The localized name of the document.

@MainActor var localizedName: String { get }

Discussion

By default, UIKit obtains the value from the filename component of fileURL. You can override the getter accessor method of this property to provide a custom name for presentation to the user, such as in error strings. See UIDocument for overriding advice.

UIKit sets this property before it calls the completion handlers of the open(completionHandler:), save(to:for:completionHandler:), and revert(toContentsOf:completionHandler:). If, outside of these methods or their completion handlers, you want to wait for any pending file operations to complete before you access this property, you can call performAsynchronousFileAccess(_:) and access the property value in the block parameter.

See Also

Accessing document attributes

var fileURL: URL

The file URL you use to initialize the document.

var fileType: String?

The file type of the document.

var fileModificationDate: Date?

The date and time your app last modified the document file.

var documentState: UIDocument.State

The current state of the document.

var progress: Progress?

The upload or download progress of a document.


https://developer.apple.com/documentation/uikit/uidocument/save(to:for:completionhandler:)

#app-main)

  • UIKit
  • UIDocument
  • save(to:for:completionHandler:)

Instance Method

save(to:for:completionHandler:)

Saves document data to the specified location in the application sandbox.

@MainActor func save( to url: URL, for saveOperation: UIDocument.SaveOperation,

) @MainActor func save( to url: URL, for saveOperation: UIDocument.SaveOperation

Parameters

url

The file URL identifying the location in the application sandbox to write the document data to. Typically, this is the URL obtained from the fileURL property.

saveOperation

A constant that indicates whether the document file is being written the first time or whether it is being overwritten. See UIDocument.SaveOperation for details.

completionHandler

A block with code that is executed when the save operation concludes. The block returns no value and has one parameter:

success

true if the save operation succeeds, otherwise false.

This block is invoked on the calling queue.

Discussion

The default implementation of this method first calls the contents(forType:) method synchronously on the calling queue to get the document data to save. Then it calls the writeContents(_:andAttributes:safelyTo:for:) method on a background queue to perform the actual writing of the data to disk.

If you override this method, its recommended that you first call the superclass implementation of the method ( super). If you do not call super, you must do two things:

  • Call performAsynchronousFileAccess(_:) to put the save operation on a background queue.

  • In the block parameter, implement coordinated writing by using the NSFileCoordinator class.

  • From within the coordinated write, call writeContents(_:andAttributes:safelyTo:for:).

See Also

Writing document data

Asynchronously closes the document after saving any changes.

Returns the document data to be saved.

func writeContents(Any, andAttributes: [AnyHashable : Any]?, safelyTo: URL, for: UIDocument.SaveOperation) throws

Ensures that document data is written safely to a specified location in the application sandbox.

func writeContents(Any, to: URL, for: UIDocument.SaveOperation, originalContentsURL: URL?) throws

Writes the document data to disk at the sandbox location indicated by a file URL.

var savingFileType: String?

Returns the file type to use for saving a document.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.

Returns a file extension to append to the file URL of the document file being written.


https://developer.apple.com/documentation/uikit/uidocument/open(completionhandler:)

#app-main)

  • UIKit
  • UIDocument
  • open(completionHandler:)

Instance Method

open(completionHandler:)

Opens a document asynchronously.

@MainActor

Parameters

completionHandler

A block with code to execute after the open operation concludes. The block returns no value and has one parameter:

success

true if the open operation succeeds, otherwise false.

The block is invoked on the main queue.

Discussion

Call this method to begin the sequence of method calls that opens and reads a document asynchronously. The method obtains the file-system location of the document from the fileURL property. After the open operation concludes, the code in completionHandler is executed.

You can override this method if you want custom document-opening behavior, but if you do its recommended that you call the superclass implementation first ( super). If you dont call super, you should use the NSFileCoordinator class to implement coordinated reading. The default implementation calls performAsynchronousFileAccess(_:) to schedule the document-reading work for execution on a background queue and then, from the dispatched block, performs file coordination. The queued task then calls read(from:).

See Also

Reading document data

func load(fromContents: Any, ofType: String?) throws

Loads the document data into the apps data model.

func read(from: URL) throws

Reads the document data in a file at a specified location in the application sandbox.


https://developer.apple.com/documentation/uikit/uidocument/close(completionhandler:)

#app-main)

  • UIKit
  • UIDocument
  • close(completionHandler:)

Instance Method

close(completionHandler:)

Asynchronously closes the document after saving any changes.

@MainActor

Parameters

completionHandler

A block with code to execute after the save-and-close operation concludes. The block returns no value and has one parameter:

success

true if any save operation succeeds, otherwise false.

The block is invoked on the main queue.

Discussion

You call this method to begin the sequence of method calls that saves a document safely and asynchronously. The file-system location of the document derives from the fileURL property. After the save operation concludes, the code in completionHandler is executed. In this code, you can close the document — for example, by removing the documents view from the screen. Additionally, if the save operation didnt succeed ( success is false), you can respond in an appropriate manner.

You typically wouldnt override this method. The default implementation calls the autosave(completionHandler:) method.

See Also

Writing document data

Returns the document data to be saved.

Saves document data to the specified location in the application sandbox.

func writeContents(Any, andAttributes: [AnyHashable : Any]?, safelyTo: URL, for: UIDocument.SaveOperation) throws

Ensures that document data is written safely to a specified location in the application sandbox.

func writeContents(Any, to: URL, for: UIDocument.SaveOperation, originalContentsURL: URL?) throws

Writes the document data to disk at the sandbox location indicated by a file URL.

var savingFileType: String?

Returns the file type to use for saving a document.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.

Returns a file extension to append to the file URL of the document file being written.


https://developer.apple.com/documentation/uikit/uidocument/performasynchronousfileaccess(_:)

#app-main)

  • UIKit
  • UIDocument
  • performAsynchronousFileAccess(_:)

Instance Method

performAsynchronousFileAccess(_:)

Schedules a document-reading or document-writing operation on a concurrent background queue.

@MainActor

Parameters

block

A block thats invoked as the task to execute on the background queue. The block returns no value and takes no parameters.

Discussion

A typical UIDocument subclass — one that overrides contents(forType:) and load(fromContents:ofType:) — doesnt need to call this method.

The default implementations of save(to:for:completionHandler:) and open(completionHandler:) call this method to serialize file access. If you override these methods and dont call super, you should call this method to serialize file access on a background queue. If you directly call the read(from:) method, you should wrap that call in the block passed into performAsynchronousFileAccess(_:).


https://developer.apple.com/documentation/uikit/uidocument/revert(tocontentsof:completionhandler:)

#app-main)

  • UIKit
  • UIDocument
  • revert(toContentsOf:completionHandler:)

Instance Method

revert(toContentsOf:completionHandler:)

Reverts a document to the most recent document data stored on-disk.

@MainActor func revert( toContentsOf url: URL,

) @MainActor

Parameters

url

A file URL locating the most recent version of the document file in the applications sandbox.

completionHandler

A block with code to execute after the reversion operation concludes. The block returns no value and has one parameter:

success

true if the reversion operation succeeds, otherwise false.

The block is invoked on the main queue.

Discussion

You call this method to discard all unsaved document modifications and replace the documents contents by reading the file or file package located by url. The default implementation brackets the reversion operation between disableEditing() and enableEditing() because the document shouldnt accept user changes during this period. Subclasses that override this method must call the superclass implementation ( super) or use the NSFileCoordinator class to initiate a coordinated read.


https://developer.apple.com/documentation/uikit/uidocument/fileurl

  • UIKit
  • UIDocument
  • fileURL

Instance Property

fileURL

The file URL you use to initialize the document.

@MainActor var fileURL: URL { get }

Discussion

The URL identifies the location of the document in the application sandbox. It includes the file extension, from which the file type is determined.

UIKit sets this property before it calls the completion handlers of the open(completionHandler:), save(to:for:completionHandler:), and revert(toContentsOf:completionHandler:). If, outside of these methods or their completion handlers, you want to wait for any pending file operations to complete before you access this property, you can call performAsynchronousFileAccess(_:) and access the property value in the block parameter.

See Also

init(fileURL: URL)

Returns a document object initialized with its file-system location.

Accessing document attributes

var localizedName: String

The localized name of the document.

var fileType: String?

The file type of the document.

var fileModificationDate: Date?

The date and time your app last modified the document file.

var documentState: UIDocument.State

The current state of the document.

var progress: Progress?

The upload or download progress of a document.


https://developer.apple.com/documentation/uikit/uidocument/contents(fortype:)


https://developer.apple.com/documentation/uikit/uidocument/load(fromcontents:oftype:)

#app-main)

  • UIKit
  • UIDocument
  • load(fromContents:ofType:)

Instance Method

load(fromContents:ofType:)

Loads the document data into the apps data model.

@MainActor func load( fromContents contents: Any, ofType typeName: String? ) throws

Parameters

contents

An object encapsulating the document data to load. This object is either an instance of the NSData class (for flat files) or the FileWrapper class (for file packages).

typeName

The file type of the document, a Uniform Type Identifier (UTI) based on the file extension of fileURL. You can obtain the default value of the file type from the fileType property.

Discussion

Override this method to accept and load the data for a document. After UIDocument reads the document data from the file located at fileURL it calls your subclass, passing the data to the subclass in this method. This method is called on the queue that the open(completionHandler:) method was called on (typically, the main queue).

See Also

Reading document data

Opens a document asynchronously.

func read(from: URL) throws

Reads the document data in a file at a specified location in the application sandbox.


https://developer.apple.com/documentation/uikit/uidocument/hasunsavedchanges

  • UIKit
  • UIDocument
  • hasUnsavedChanges

Instance Property

hasUnsavedChanges

A Boolean value that indicates whether the document has any unsaved changes.

@MainActor var hasUnsavedChanges: Bool { get }

Return Value

true if the document has unsaved changes, otherwise false.

Discussion

The default implementation of autosave(completionHandler:) initiates a save if this property returns true. Typical subclasses dont need to override hasUnsavedChanges. To implement change tracking, they should instead use an UndoManager object (assigned to undoManager) to register changes or call updateChangeCount(_:) every time the user makes a change; UIKit then automatically determines whether there are unsaved changes.

See Also

Tracking changes and autosaving

func updateChangeCount(UIDocument.ChangeKind)

Updates the change counter by indicating the kind of change.

var undoManager: UndoManager!

The undo manager for the document.

Returns a change token for a specific save operation.

func updateChangeCount(withToken: Any, for: UIDocument.SaveOperation)

Updates the change count with reference to a change-count token passed in by UIKit.

Initiates automatic saving of documents with unsaved changes.


https://developer.apple.com/documentation/uikit/uidocument/undomanager

  • UIKit
  • UIDocument
  • undoManager

Instance Property

undoManager

The undo manager for the document.

@MainActor var undoManager: UndoManager! { get set }

Discussion

This property holds the documents undo manager (an UndoManager object). Accessing this property lazily creates a default undo manager if a custom undo manager hasnt been set.

The undo manager for the document is registered as an observer of various UndoManager notifications so that it can call updateChangeCount(_:) as the user makes undoable changes to the document. When a subclass sets this property and implements registers changes with it, it doesnt need to call updateChangeCount(_:) directly or (more rarely) override hasUnsavedChanges.

See Also

Tracking changes and autosaving

var hasUnsavedChanges: Bool

A Boolean value that indicates whether the document has any unsaved changes.

func updateChangeCount(UIDocument.ChangeKind)

Updates the change counter by indicating the kind of change.

Returns a change token for a specific save operation.

func updateChangeCount(withToken: Any, for: UIDocument.SaveOperation)

Updates the change count with reference to a change-count token passed in by UIKit.

Initiates automatic saving of documents with unsaved changes.


https://developer.apple.com/documentation/uikit/uidocument/updatechangecount(_:)

#app-main)

  • UIKit
  • UIDocument
  • updateChangeCount(_:)

Instance Method

updateChangeCount(_:)

Updates the change counter by indicating the kind of change.

@MainActor func updateChangeCount(_ change: UIDocument.ChangeKind)

Parameters

change

A constant that indicates whether a change has been made, cleared, undone, or redone. See UIDocument.ChangeKind for more information.

Discussion

Calling this method can affect the value returned by hasUnsavedChanges. You shouldnt need to call method this if you access an UndoManager object from the undoManager property (or assign a custom one to it) and register changes with the undo manager.

See Also

Tracking changes and autosaving

var hasUnsavedChanges: Bool

A Boolean value that indicates whether the document has any unsaved changes.

var undoManager: UndoManager!

The undo manager for the document.

Returns a change token for a specific save operation.

func updateChangeCount(withToken: Any, for: UIDocument.SaveOperation)

Updates the change count with reference to a change-count token passed in by UIKit.

Initiates automatic saving of documents with unsaved changes.


https://developer.apple.com/documentation/uikit/uidocument/documentstate

  • UIKit
  • UIDocument
  • documentState

Instance Property

documentState

The current state of the document.

@MainActor var documentState: UIDocument.State { get }

Discussion

When document state changes, the UIDocument object stores a constant identifying the new state in this property. See the UIDocument.State enum for descriptions of these constants. To receive notifications about changes in document state, observe the stateChangedNotification notification.

See Also

Accessing document attributes

var fileURL: URL

The file URL you use to initialize the document.

var localizedName: String

The localized name of the document.

var fileType: String?

The file type of the document.

var fileModificationDate: Date?

The date and time your app last modified the document file.

var progress: Progress?

The upload or download progress of a document.


https://developer.apple.com/documentation/uikit/uidocument/statechangednotification

  • UIKit
  • UIDocument
  • stateChangedNotification

Type Property

stateChangedNotification

A notification the document object posts when theres a change in the state of the document.

nonisolated class let stateChangedNotification: NSNotification.Name

Discussion

When handling this notification, check the value of the documentState property to see what the new state is, and then proceed accordingly. Theres no userInfo dictionary.


https://developer.apple.com/documentation/uikit/uidocument/state/inconflict


https://developer.apple.com/documentation/uikit/uidocument/state/closed

  • UIKit
  • UIDocument
  • UIDocument.State
  • closed

Type Property

closed

There was an error in reading the document.

iOSiPadOSMac CatalystvisionOS

static var closed: UIDocument.State { get }

Discussion

The document has either not been successfully opened, or has been since closed. The document properties might not be valid.

See Also

Constants

static var normal: UIDocument.State

The document is open, editing is enabled, and there are no conflicts or errors associated with it.

static var inConflict: UIDocument.State

Conflicts exist for the document file located at the file URL.

static var savingError: UIDocument.State

There was an error in saving or reverting the document.

static var editingDisabled: UIDocument.State

The document is busy and it isnt currently safe for user edits.

static var progressAvailable: UIDocument.State

The document is being downloaded or uploaded and progress information is available.


https://developer.apple.com/documentation/uikit/uidocument/state/savingerror

  • UIKit
  • UIDocument
  • UIDocument.State
  • savingError

Type Property

savingError

There was an error in saving or reverting the document.

iOSiPadOSMac CatalystvisionOS

static var savingError: UIDocument.State { get }

See Also

Constants

static var normal: UIDocument.State

The document is open, editing is enabled, and there are no conflicts or errors associated with it.

static var closed: UIDocument.State

There was an error in reading the document.

static var inConflict: UIDocument.State

Conflicts exist for the document file located at the file URL.

static var editingDisabled: UIDocument.State

The document is busy and it isnt currently safe for user edits.

static var progressAvailable: UIDocument.State

The document is being downloaded or uploaded and progress information is available.


https://developer.apple.com/documentation/uikit/uidocument/handleerror(_:userinteractionpermitted:)

#app-main)

  • UIKit
  • UIDocument
  • handleError(_:userInteractionPermitted:)

Instance Method

handleError(_:userInteractionPermitted:)

Handles an error that occurs during an attempt to read, save, or revert a document.

@MainActor func handleError( _ error: any Error, userInteractionPermitted: Bool )

Parameters

error

An object encapsulating information about an error encountered in an attempt to open, save, or revert a document. The error domain is NSCocoaErrorDomain. The error code is one of the enum constants declared in FoundationErrors.h.

userInteractionPermitted

If false, no attempt is (or should be) made to present a modal view to the user. This value can be false in cases such as when a save operation fails while the application is being suspended. If this parameter is true, UIKit or your override may present error information to the user in a modal view and (optionally) allow the user to resolve the error.

Discussion

Typical UIDocument subclasses dont need to call or override this method. Instead, they can observe the stateChangedNotification notification to be notified of changes in document state. In their notification handler, they can check the value of the documentState property and proceed accordingly. See Resolve conflicts and handle errors for a discussion of this.

If youre using managed documents (instances of the UIManagedDocument subclass), you must subclass this method and, if desired, the finishedHandlingError(_:recovered:) method. Subclassing allows your app to observe errors in saving or validation. The stateChangedNotification notification doesnt contain a userInfo dictionary and so doesnt convey specific error information.

If you directly call any of the advanced reading and writing methods that have an error-object parameter (for example, writeContents(_:andAttributes:safelyTo:for:)) and that call returns an NSError object by indirection, you should call this method ( handleError(_:userInteractionPermitted:)), passing in the error object.

This method is called by the default implementations of open(completionHandler:) and save(to:for:completionHandler:) when UIDocument encounters a reading or writing error, respectively.

If you override this method and dont invoke the superclass implementation ( super), youre responsible for the following:

  • Calling finishedHandlingError(_:recovered:) when youre finished handling the error — for example, when the application doesnt require any additional user feedback about the error.

  • Implementing userInteractionNoLongerPermitted(forError:) to conclude error handling immediately. If userInteractionPermitted is false, you should immediately handle the error and call finishedHandlingError(_:recovered:) within the context of the handleError(_:userInteractionPermitted:).

See Also

Resolving conflicts and handling errors

func finishedHandlingError(any Error, recovered: Bool)

Tells UIKit that you finished handling the error.

func userInteractionNoLongerPermitted(forError: any Error)

Indicates when its no longer safe to proceed without immediately handling the error.


https://developer.apple.com/documentation/uikit/uidocument/read(from:)

#app-main)

  • UIKit
  • UIDocument
  • read(from:)

Instance Method

read(from:)

Reads the document data in a file at a specified location in the application sandbox.

@MainActor func read(from url: URL) throws

Parameters

url

A file URL that identifies the location of the document file in the application sandbox. This file URL is typically the one returned by the fileURL property.

Discussion

Typical UIDocument subclasses shouldnt need to call this method directly, especially if the entire file is read at once. The default implementation calls load(fromContents:ofType:) on the queue on which open(completionHandler:) was called to provide the UIDocument subclass with the document data object.

Subclasses that want more control over the reading of the document file—for example, that want to read a large document file incrementally—can override this method. It isnt necessary for these subclasses to call the superclass implementation ( super).

See Also

Reading document data

Opens a document asynchronously.

func load(fromContents: Any, ofType: String?) throws

Loads the document data into the apps data model.


https://developer.apple.com/documentation/uikit/uidocument/writecontents(_:to:for:originalcontentsurl:)

#app-main)

  • UIKit
  • UIDocument
  • writeContents(_:to:for:originalContentsURL:)

Instance Method

writeContents(_:to:for:originalContentsURL:)

Writes the document data to disk at the sandbox location indicated by a file URL.

@MainActor func writeContents( _ contents: Any, to url: URL, for saveOperation: UIDocument.SaveOperation, originalContentsURL: URL? ) throws

Parameters

contents

The document data to write to disk. Typically, the data is encapsulated by an NSData object (if a flat file) or an FileWrapper object (if a file package).

If the object encapsulating the document data is of some other type, you should override this method or writeContents(_:andAttributes:safelyTo:for:) to perform the actual writing of the data.

url

A file URL specifying the location of the document file in the application sandbox.

saveOperation

A constant that indicates whether the document file is being written the first time or whether it is being overwritten. See UIDocument.SaveOperation for details.

originalContentsURL

A file URL specifying the previous location of the document file (if not nil).

Discussion

This method is called by the writeContents(_:andAttributes:safelyTo:for:) to write the actual file data. It is passed the contents object returned from your contents(forType:) implementation. The default implementation of this method supports NSData or FileWrapper contents by asking the contents object to save itself to the corresponding URL.

If you override this method, you may choose to return a different type of data from contents(forType:) or you may choose to not override contents(forType:) and generate the writable data directly within this method. If you override this method, you should not invoke the superclass implementation.

See Also

Writing document data

Asynchronously closes the document after saving any changes.

Returns the document data to be saved.

Saves document data to the specified location in the application sandbox.

func writeContents(Any, andAttributes: [AnyHashable : Any]?, safelyTo: URL, for: UIDocument.SaveOperation) throws

Ensures that document data is written safely to a specified location in the application sandbox.

var savingFileType: String?

Returns the file type to use for saving a document.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.

Returns a file extension to append to the file URL of the document file being written.


https://developer.apple.com/documentation/uikit/uidocument/writecontents(_:andattributes:safelyto:for:)

#app-main)

  • UIKit
  • UIDocument
  • writeContents(_:andAttributes:safelyTo:for:)

Instance Method

writeContents(_:andAttributes:safelyTo:for:)

Ensures that document data is written safely to a specified location in the application sandbox.

@MainActor func writeContents( _ contents: Any, andAttributes additionalFileAttributes: [AnyHashable : Any]? = nil, safelyTo url: URL, for saveOperation: UIDocument.SaveOperation ) throws

Parameters

contents

The document data to write to disk. Typically, the data is encapsulated by an NSData object (if a flat file) or an FileWrapper object (if a file package).

If the object encapsulating the document data is of some other type, you should override this method or writeContents(_:to:for:originalContentsURL:) to perform the actual writing of the data.

additionalFileAttributes

A dictionary of FileManager file attributes to assign to the document file. The default implementation obtains these file attributes by calling fileAttributesToWrite(to:for:).

url

The file URL specifying the location of the document file in the application sandbox.

saveOperation

A constant that indicates whether the document file is being written the first time or whether it is being overwritten. See UIDocument.SaveOperation for details.

Discussion

This method is called by the save(to:for:completionHandler:) method to save the file data (and associated attributes in the case of an FileWrapper). It creates temporary files and directories as necessary so that successful saves can be completed atomically and failed saves can be rolled back cleanly. This method calls writeContents(_:to:for:originalContentsURL:) to save the contents object, passing the location for the new saved file in the toURL parameter and the location of the previously existing file in the originalContentsURL parameter, if this is an overwrite operation.

If you want to change how file data is saved, you generally override the writeContents(_:to:for:originalContentsURL:) method instead of this method. Additionally, you dont need to call this method directly unless you are overriding the save(to:for:completionHandler:) method.

See Also

Writing document data

Asynchronously closes the document after saving any changes.

Returns the document data to be saved.

Saves document data to the specified location in the application sandbox.

func writeContents(Any, to: URL, for: UIDocument.SaveOperation, originalContentsURL: URL?) throws

Writes the document data to disk at the sandbox location indicated by a file URL.

var savingFileType: String?

Returns the file type to use for saving a document.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.

Returns a file extension to append to the file URL of the document file being written.


https://developer.apple.com/documentation/uikit/uidocument/savingfiletype

  • UIKit
  • UIDocument
  • savingFileType

Instance Property

savingFileType

Returns the file type to use for saving a document.

@MainActor var savingFileType: String? { get }

Return Value

A Uniform Type Identifier (UTI) identifying a document type (for example, PDF or HTML).

Discussion

The default implementation returns the current file type obtained from the fileType property. The default implementation of the save(to:for:completionHandler:) method appends an extension to the file URL thats based on the file type. So if you want to move the document to a new type and extension, you can override this method to supply that file type.

See Also

Writing document data

Asynchronously closes the document after saving any changes.

Returns the document data to be saved.

Saves document data to the specified location in the application sandbox.

func writeContents(Any, andAttributes: [AnyHashable : Any]?, safelyTo: URL, for: UIDocument.SaveOperation) throws

Ensures that document data is written safely to a specified location in the application sandbox.

func writeContents(Any, to: URL, for: UIDocument.SaveOperation, originalContentsURL: URL?) throws

Writes the document data to disk at the sandbox location indicated by a file URL.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.

Returns a file extension to append to the file URL of the document file being written.


https://developer.apple.com/documentation/uikit/uinavigationitemrenamedelegate-96g5t

  • UIKit
  • UINavigationItemRenameDelegate

Protocol

UINavigationItemRenameDelegate

Methods an object implements to rename a navigation item.

Overview

A navigation item ( UINavigationItem) uses this delegate to determine whether a person can change the navigation items title and to handle the rename process.

Topics

Determining rename support

- navigationItemShouldBeginRenaming:

Asks the delegate whether the navigation item supports renaming.

- navigationItem:shouldEndRenamingWithTitle:

Asks the delegate whether to continue or abandon the rename process.

Handling the rename process

- navigationItem:willBeginRenamingWithSuggestedTitle:selectedRange:

Tells the delegate when the rename process starts.

- navigationItem:didEndRenamingWithTitle:

Tells the delegate when the rename process ends.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIDocument

See Also

Renaming documents

renameDelegate

The delegate for renaming the navigation item.


https://developer.apple.com/documentation/uikit/uinavigationitem/renamedelegate-o32h

  • UIKit
  • UINavigationItem
  • renameDelegate

Instance Property

renameDelegate

The delegate for renaming the navigation item.

Mentioned in

Building a desktop-class iPad app

Discussion

If you assign a non- nil value to this property, UIKit shows an inline text field UI for changing the navigation items title. This UI appears when either you or the system calls rename(_:) on the navigation controller, which occurs when a person taps Rename in the title menu or when you call rename(_:) explicitly.

To show Rename in the navigation items title menu, include the Rename menu element in the menu you return from titleMenuProvider. UIKit includes Rename in the set of menu element suggestions it passes in to this closure.

If you only want to show Rename in the title menu, assign a renameDelegate without setting a titleMenuProvider. In this case, UIKit automatically generates a title menu containing the Rename menu element only.

If you set this property to nil while a rename operation is in progress, the operation cancels immediately.

See Also

Renaming documents

UINavigationItemRenameDelegate

Methods an object implements to rename a navigation item.


https://developer.apple.com/documentation/uikit/uinavigationitemrenamedelegate-5j4ws/navigationitem(_:didendrenamingwith:)

#app-main)

  • UIKit
  • UINavigationItemRenameDelegate
  • navigationItem(_:didEndRenamingWith:)

Instance Method

navigationItem(_:didEndRenamingWith:)

Tells the delegate when the rename process ends.

Mac CatalystvisionOS

@MainActor @preconcurrency func navigationItem( _: UINavigationItem, didEndRenamingWith title: String )

Required

Parameters

title

The new title of the navigation item.

Discussion

UIKit calls this method after a person finishes renaming the navigation item. Implement this method to update your data model with the new title as needed.

UIKit updates the navigation items title automatically. However, if you want to modify the final title that the system passes in to this method, you must update the navigation items title manually.

See Also

Handling the rename process

Tells the delegate when the rename process starts.

Required Default implementation provided.


https://developer.apple.com/documentation/uikit/uinavigationitemrenamedelegate-96g5t/navigationitem:didendrenamingwithtitle:

  • UIKit
  • UINavigationItemRenameDelegate
  • navigationItem:didEndRenamingWithTitle:

Instance Method

navigationItem:didEndRenamingWithTitle:

Tells the delegate when the rename process ends.

  • (void) navigationItem:(UINavigationItem *) navigationItem didEndRenamingWithTitle:(NSString *) title;

Parameters

navigationItem

The navigation item with the changing title.

title

The new title of the navigation item.

Discussion

UIKit calls this method after a person finishes renaming the navigation item. Implement this method to update your data model with the new title as needed.

UIKit updates the navigation items title automatically. However, if you want to modify the final title that the system passes in to this method, you must update the navigation items title manually.

See Also

Handling the rename process

- navigationItem:willBeginRenamingWithSuggestedTitle:selectedRange:

Tells the delegate when the rename process starts.


https://developer.apple.com/documentation/uikit/uidocument/filemodificationdate

  • UIKit
  • UIDocument
  • fileModificationDate

Instance Property

fileModificationDate

The date and time your app last modified the document file.

@MainActor var fileModificationDate: Date? { get set }

Discussion

The modification date is updated by the open(completionHandler:), save(to:for:completionHandler:), and revert(toContentsOf:completionHandler:) methods. Its value is nil if none of these methods has completed successfully at least once. If you override any of these methods, you should be sure to set this property in your implementation.

UIKit sets this property before it calls the completion handlers of the open(completionHandler:), save(to:for:completionHandler:), and revert(toContentsOf:completionHandler:). If, outside of these methods or their completion handlers, you want to wait for any pending file operations to complete before you access this property, you can call performAsynchronousFileAccess(_:) and access the property value in the block parameter.

See Also

Accessing document attributes

var fileURL: URL

The file URL you use to initialize the document.

var localizedName: String

The localized name of the document.

var fileType: String?

The file type of the document.

var documentState: UIDocument.State

The current state of the document.

var progress: Progress?

The upload or download progress of a document.


https://developer.apple.com/documentation/uikit/uidocument/progress


https://developer.apple.com/documentation/uikit/uidocument/filenameextension(fortype:saveoperation:)

#app-main)

  • UIKit
  • UIDocument
  • fileNameExtension(forType:saveOperation:)

Instance Method

fileNameExtension(forType:saveOperation:)

Returns a file extension to append to the file URL of the document file being written.

@MainActor func fileNameExtension( forType typeName: String?, saveOperation: UIDocument.SaveOperation

Parameters

typeName

A Uniform Type Identifier (UTI) that indicates the type of document (for example, PDF or HTML).

saveOperation

A constant that indicates whether the document file is being written the first time or whether its being overwritten. See UIDocument.SaveOperation for details.

Return Value

A string to use as the file extension of the document file.

Discussion

The default implementation queries Launch Services to obtain the file extension matching the file (document) type. You can override this method to return a file extension thats different from the default extension. The default implementation of the save(to:for:completionHandler:) method calls this method before it gets the document content and writes the document file to disk.

See Also

Writing document data

Asynchronously closes the document after saving any changes.

Returns the document data to be saved.

Saves document data to the specified location in the application sandbox.

func writeContents(Any, andAttributes: [AnyHashable : Any]?, safelyTo: URL, for: UIDocument.SaveOperation) throws

Ensures that document data is written safely to a specified location in the application sandbox.

func writeContents(Any, to: URL, for: UIDocument.SaveOperation, originalContentsURL: URL?) throws

Writes the document data to disk at the sandbox location indicated by a file URL.

var savingFileType: String?

Returns the file type to use for saving a document.

Returns a dictionary of file attributes to associate with the document file when writing or updating it.


https://developer.apple.com/documentation/uikit/uidocument/creationintent


https://developer.apple.com/documentation/uikit/uidocument/disableediting()

#app-main)

  • UIKit
  • UIDocument
  • disableEditing()

Instance Method

disableEditing()

Disables editing when its unsafe to make changes to a document.

@MainActor func disableEditing()

Discussion

Subclasses should override this method to prevent the user from editing the document when its unsafe to do so, such as during a save-and-close or revert operation. When editing is safe again, UIKit class calls enableEditing(). The default implementation of this method does nothing.

See Also

Disabling and enabling editing

func enableEditing()

Enables editing when its safe again to make changes to a document.


https://developer.apple.com/documentation/uikit/uidocument/enableediting()


https://developer.apple.com/documentation/uikit/uidocument/changecounttoken(for:)

#app-main)

  • UIKit
  • UIDocument
  • changeCountToken(for:)

Instance Method

changeCountToken(for:)

Returns a change token for a specific save operation.

@MainActor

Parameters

saveOperation

A constant that indicates whether the save operation is writing a new file or overwriting an existing one. See UIDocument.SaveOperation for descriptions of these constants.

Return Value

An object to use as a change-count token.

Discussion

To get autosaving capabilities for your documents, you must implement change tracking. Typically you do this by using an UndoManager object (assigned to undoManager property) to register changes or by calling the updateChangeCount(_:) method every time the user makes a change; UIKit then automatically determines whether there are unsaved changes and returns the proper value from hasUnsavedChanges. If you take neither of these approaches (and you want the autosaving feature), you must implement this method as well as updateChangeCount(withToken:for:) and hasUnsavedChanges.

You implement this particular method to return a change-count token that UIKit uses to encapsulate the history of document changes for a particular save operation. The token can be any object that represents the current change state of the document. This method is called at the start of the default implementation of the save(to:for:completionHandler:) method. At the end of this default implementation, it calls the updateChangeCount(withToken:for:) method, passing in the change-count token. You implement the latter method to compare the token with the one returned earlier; by doing so, you can determine if the document has acquired new unsaved changes between the start and end of an asynchronous write operation. You can then return the proper value from your override of hasUnsavedChanges.

See Also

Tracking changes and autosaving

var hasUnsavedChanges: Bool

A Boolean value that indicates whether the document has any unsaved changes.

func updateChangeCount(UIDocument.ChangeKind)

Updates the change counter by indicating the kind of change.

var undoManager: UndoManager!

The undo manager for the document.

func updateChangeCount(withToken: Any, for: UIDocument.SaveOperation)

Updates the change count with reference to a change-count token passed in by UIKit.

Initiates automatic saving of documents with unsaved changes.


https://developer.apple.com/documentation/uikit/uidocument/updatechangecount(withtoken:for:)

#app-main)

  • UIKit
  • UIDocument
  • updateChangeCount(withToken:for:)

Instance Method

updateChangeCount(withToken:for:)

Updates the change count with reference to a change-count token passed in by UIKit.

@MainActor func updateChangeCount( withToken changeCountToken: Any, for saveOperation: UIDocument.SaveOperation )

Parameters

changeCountToken

An object to use as a change-count token. UIDocument obtained this token earlier by calling changeCountToken(for:).

saveOperation

A constant that indicates whether the save operation is writing a new file or overwriting an existing one. See UIDocument.SaveOperation for descriptions of these constants.

Discussion

To get autosaving capabilities for your documents, you must implement change tracking. Typically you do this by using an UndoManager object (assigned to undoManager property) to register changes or by calling the updateChangeCount(_:) method every time the user makes a change; UIKit then automatically determines whether there are unsaved changes and returns the proper value from hasUnsavedChanges. If you take neither of these approaches (and you want the autosaving feature), you must implement this method as well as changeCountToken(for:) and hasUnsavedChanges.

You implement the changeCountToken(for:) method to return a change-count token that UIKit uses to encapsulate the history of document changes for a particular save operation. The token can be any object that represents the current change state of the document. This method is called at the start of the default implementation of the save(to:for:completionHandler:) method. At the end of this default implementation, UIDocument calls this method ( updateChangeCount(withToken:for:)), passing in the change-count token. You implement this method to compare the token with the one returned earlier; by doing so, you can determine if the document has acquired new unsaved changes between the start and end of an asynchronous write operation. You can then return the proper value from your override of hasUnsavedChanges.

See Also

Tracking changes and autosaving

var hasUnsavedChanges: Bool

A Boolean value that indicates whether the document has any unsaved changes.

func updateChangeCount(UIDocument.ChangeKind)

Updates the change counter by indicating the kind of change.

var undoManager: UndoManager!

The undo manager for the document.

Returns a change token for a specific save operation.

Initiates automatic saving of documents with unsaved changes.


https://developer.apple.com/documentation/uikit/uidocument/autosave(completionhandler:)

#app-main)

  • UIKit
  • UIDocument
  • autosave(completionHandler:)

Instance Method

autosave(completionHandler:)

Initiates automatic saving of documents with unsaved changes.

@MainActor

Parameters

completionHandler

A block with code to execute after automatic saving concludes. The block returns no value and has one parameter:

success

true if the autosaving operation succeeds, otherwise false.

The block is invoked on the calling queue.

Discussion

UIDocument periodically invokes this method to initiate a save operation if there are unsaved changes. You shouldnt call this method directly. Subclasses can override it if they want to do special things with autosaving. The default implementation of this method invokes the hasUnsavedChanges method and, if that returns true, it invokes the save(to:for:completionHandler:) method.

This method should only be invoked for period-based saves. You may invoke it with the success parameter of the completion-handler parameter set to false and return; this makes it safe to not actually save when autosave(completionHandler:) is invoked. However, if you call save(to:for:completionHandler:), saving of document data must occur.

See Also

Tracking changes and autosaving

var hasUnsavedChanges: Bool

A Boolean value that indicates whether the document has any unsaved changes.

func updateChangeCount(UIDocument.ChangeKind)

Updates the change counter by indicating the kind of change.

var undoManager: UndoManager!

The undo manager for the document.

Returns a change token for a specific save operation.

func updateChangeCount(withToken: Any, for: UIDocument.SaveOperation)

Updates the change count with reference to a change-count token passed in by UIKit.


https://developer.apple.com/documentation/uikit/uidocument/useractivity

  • UIKit
  • UIDocument
  • userActivity

Instance Property

userActivity

An object encapsulating a user activity supported by this document.

@MainActor var userActivity: NSUserActivity? { get set }

Discussion

UIDocument automatically creates NSUserActivity objects. The system makes user activities eligible for Handoff if the document is iCloud-based and the apps Info.plist property list file includes a CFBundleDocumentTypes key of NSUbiquitousDocumentUserActivityType. The value of NSUbiquitousDocumentUserActivityType is a string that represents the NSUserActivity objects activity type. The documents URL is in the NSUserActivity objects userInfo dictionary with the userActivityURLKey.

In iOS, to make an NSUserActivity object that UIKit manages current, you must either call becomeCurrent() explicitly or have the documents NSUserActivity object also set on a UIViewController object thats in the view hierarchy when the app comes to the foreground.

You can use this property from any thread. Its KVO-observable in case you share the userActivity object with other objects that need to be kept in sync as the document moves into and out of iCloud.

See Also

Supporting user activities

func restoreUserActivityState(NSUserActivity)

Restores the state needed to continue the given user activity.

func updateUserActivityState(NSUserActivity)

Updates the state of the given user activity.


https://developer.apple.com/documentation/uikit/uidocument/restoreuseractivitystate(_:)

#app-main)

  • UIKit
  • UIDocument
  • restoreUserActivityState(_:)

Instance Method

restoreUserActivityState(_:)

Restores the state needed to continue the given user activity.

@MainActor func restoreUserActivityState(_ userActivity: NSUserActivity)

Parameters

userActivity

The user activity to be continued.

Discussion

Subclasses override this method to restore the responders state with the given user activity. The override should use the state data contained in the userInfo dictionary of the given user activity to restore the object.

User activities managed by NSDocument can be restored automatically, if false is returned from application:continueActivity:restorationHandler: or if its unimplemented. In this situation, the document is opened by the NSDocumentController method openDocument(withContentsOf:display:completionHandler:) and receives a restoreUserActivityState(_:) message.

See Also

Supporting user activities

var userActivity: NSUserActivity?

An object encapsulating a user activity supported by this document.

func updateUserActivityState(NSUserActivity)

Updates the state of the given user activity.


https://developer.apple.com/documentation/uikit/uidocument/updateuseractivitystate(_:)

#app-main)

  • UIKit
  • UIDocument
  • updateUserActivityState(_:)

Instance Method

updateUserActivityState(_:)

Updates the state of the given user activity.

@MainActor func updateUserActivityState(_ userActivity: NSUserActivity)

Parameters

userActivity

The user activity to be updated.

Discussion

The default implementation of this method puts the documents fileURL into the NSUserActivity objects userInfo dictionary with the userActivityURLKey. UIDocument automatically sets the needsSave property of the NSUserActivity object to true when the fileURL changes.

See Also

Supporting user activities

var userActivity: NSUserActivity?

An object encapsulating a user activity supported by this document.

func restoreUserActivityState(NSUserActivity)

Restores the state needed to continue the given user activity.


https://developer.apple.com/documentation/uikit/uidocument/finishedhandlingerror(_:recovered:)

#app-main)

  • UIKit
  • UIDocument
  • finishedHandlingError(_:recovered:)

Instance Method

finishedHandlingError(_:recovered:)

Tells UIKit that you finished handling the error.

@MainActor func finishedHandlingError( _ error: any Error, recovered: Bool )

Parameters

error

An error object encapsulating information about the error.

recovered

true if you recovered from the error, otherwise false.

Discussion

This method is called by default when handling of an error (including any user interaction) is complete. Subclasses need to call this method only if they override handleError(_:userInteractionPermitted:) and do not call the superclass implementation ( super). If you override this method, you must call super.

See Also

Resolving conflicts and handling errors

func handleError(any Error, userInteractionPermitted: Bool)

Handles an error that occurs during an attempt to read, save, or revert a document.

func userInteractionNoLongerPermitted(forError: any Error)

Indicates when its no longer safe to proceed without immediately handling the error.


https://developer.apple.com/documentation/uikit/uidocument/userinteractionnolongerpermitted(forerror:)

#app-main)

  • UIKit
  • UIDocument
  • userInteractionNoLongerPermitted(forError:)

Instance Method

userInteractionNoLongerPermitted(forError:)

Indicates when its no longer safe to proceed without immediately handling the error.

@MainActor func userInteractionNoLongerPermitted(forError error: any Error)

Parameters

error

An error object encapsulating information about the error.

Discussion

UIKit calls this method when its no longer safe to proceed without immediately handling the error, such as when the application is being suspended. Subclasses that override this method must immediately end error handling (including dismissing any interactive user interface) and call finishedHandlingError(_:recovered:) before returning. Its only necessary to override this method if you override handleError(_:userInteractionPermitted:) without invoking the superclass implementation ( super).

See Also

Resolving conflicts and handling errors

func handleError(any Error, userInteractionPermitted: Bool)

Handles an error that occurs during an attempt to read, save, or revert a document.

func finishedHandlingError(any Error, recovered: Bool)

Tells UIKit that you finished handling the error.


https://developer.apple.com/documentation/uikit/uidocument/changekind


https://developer.apple.com/documentation/uikit/uidocument/saveoperation


https://developer.apple.com/documentation/uikit/uidocument/state

  • UIKit
  • UIDocument
  • UIDocument.State

Structure

UIDocument.State

Constants that specify the document state.

iOSiPadOSMac CatalystvisionOS

struct State

Overview

A UIDocument object stores the current state of the document in the documentState property. To receive notifications about changes in document state, observe the stateChangedNotification notification.

Topics

Constants

static var normal: UIDocument.State

The document is open, editing is enabled, and there are no conflicts or errors associated with it.

static var closed: UIDocument.State

There was an error in reading the document.

static var inConflict: UIDocument.State

Conflicts exist for the document file located at the file URL.

static var savingError: UIDocument.State

There was an error in saving or reverting the document.

static var editingDisabled: UIDocument.State

The document is busy and it isnt currently safe for user edits.

static var progressAvailable: UIDocument.State

The document is being downloaded or uploaded and progress information is available.

Initializers

init(rawValue: UInt)

Creates a document state structure with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • ExpressibleByArrayLiteral
  • OptionSet
  • RawRepresentable
  • Sendable
  • SendableMetatype
  • SetAlgebra

See Also

Constants

enum ChangeKind

Constants that specify the kind of change to a document.

enum SaveOperation

Constants that specify the type of save operation.

class let userActivityURLKey: String

The key that identifies the document associated with a user activity.


https://developer.apple.com/documentation/uikit/uidocument/useractivityurlkey

  • UIKit
  • UIDocument
  • userActivityURLKey

Type Property

userActivityURLKey

The key that identifies the document associated with a user activity.

class let userActivityURLKey: String

Discussion

You use this key in the userInfo dictionary of an NSUserActivity object. Its value is the URL of the document associated with the user activity.

When the NSUbiquitousDocumentUserActivityType key is present in a CFBundleDocumentTypes entry, AppKit automatically creates an NSUserActivity object for documents in iCloud, using the given activity type.

See Also

Constants

enum ChangeKind

Constants that specify the kind of change to a document.

enum SaveOperation

Constants that specify the type of save operation.

struct State

Constants that specify the document state.


https://developer.apple.com/documentation/uikit/uidocument/statechangedmessage

  • UIKit
  • UIDocument
  • UIDocument.StateChangedMessage Beta

Structure

UIDocument.StateChangedMessage

struct StateChangedMessage

Topics

Initializers

init(document: UIDocument)

Instance Properties

var document: UIDocument

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/customizing-a-document-based-app-s-launch-experience)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller)


https://developer.apple.com/documentation/uikit/uidocument/init(fileurl:)),


https://developer.apple.com/documentation/uikit/uidocument/filetype)


https://developer.apple.com/documentation/uikit/uidocument/localizedname)


https://developer.apple.com/documentation/uikit/uidocument/save(to:for:completionhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/open(completionhandler:))


https://developer.apple.com/documentation/uikit/uidocument/close(completionhandler:))


https://developer.apple.com/documentation/uikit/uidocument/open(completionhandler:)),


https://developer.apple.com/documentation/uikit/uidocument/close(completionhandler:)),

),#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument)-based


https://developer.apple.com/documentation/uikit/uidocument):


https://developer.apple.com/documentation/uikit/uidocument/performasynchronousfileaccess(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/revert(tocontentsof:completionhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/fileurl)


https://developer.apple.com/documentation/uikit/uidocument/fileurl))


https://developer.apple.com/documentation/uikit/uidocument/contents(fortype:))


https://developer.apple.com/documentation/uikit/uidocument/load(fromcontents:oftype:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument),


https://developer.apple.com/documentation/uikit/uidocument/hasunsavedchanges)


https://developer.apple.com/documentation/uikit/uidocument/undomanager)


https://developer.apple.com/documentation/uikit/uidocument/updatechangecount(_:))


https://developer.apple.com/documentation/uikit/uidocument/documentstate)


https://developer.apple.com/documentation/uikit/uidocument/statechangednotification)


https://developer.apple.com/documentation/uikit/uidocument/state/inconflict).


https://developer.apple.com/documentation/uikit/uidocument/state/closed)


https://developer.apple.com/documentation/uikit/uidocument/state/savingerror)


https://developer.apple.com/documentation/uikit/uidocument/revert(tocontentsof:completionhandler:)),

),#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/handleerror(_:userinteractionpermitted:))


https://developer.apple.com/documentation/uikit/uidocument/contents(fortype:)).


https://developer.apple.com/documentation/uikit/uidocument/read(from:))


https://developer.apple.com/documentation/uikit/uidocument/writecontents(_:to:for:originalcontentsurl:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/save(to:for:completionhandler:)).

).#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/writecontents(_:andattributes:safelyto:for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/savingfiletype)


https://developer.apple.com/documentation/uikit/uidocument/filetype)).


https://developer.apple.com/documentation/uikit/uinavigationitemrenamedelegate-96g5t)


https://developer.apple.com/documentation/uikit/uidocumentviewcontroller),


https://developer.apple.com/documentation/uikit/uinavigationitem/renamedelegate-o32h).

.#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uinavigationitemrenamedelegate-5j4ws/navigationitem(_:didendrenamingwith:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uinavigationitemrenamedelegate-96g5t/navigationitem:didendrenamingwithtitle:)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/init(fileurl:))


https://developer.apple.com/documentation/uikit/uidocument/filemodificationdate)


https://developer.apple.com/documentation/uikit/uidocument/progress)


https://developer.apple.com/documentation/uikit/uidocument/fileattributestowrite(to:for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/filenameextension(fortype:saveoperation:))


https://developer.apple.com/documentation/uikit/uidocument/creationintent)


https://developer.apple.com/documentation/uikit/uidocument/disableediting())


https://developer.apple.com/documentation/uikit/uidocument/enableediting())


https://developer.apple.com/documentation/uikit/uidocument/changecounttoken(for:))


https://developer.apple.com/documentation/uikit/uidocument/updatechangecount(withtoken:for:))


https://developer.apple.com/documentation/uikit/uidocument/autosave(completionhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/useractivity)


https://developer.apple.com/documentation/uikit/uidocument/restoreuseractivitystate(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/updateuseractivitystate(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/finishedhandlingerror(_:recovered:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/userinteractionnolongerpermitted(forerror:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uidocument/changekind)


https://developer.apple.com/documentation/uikit/uidocument/saveoperation)


https://developer.apple.com/documentation/uikit/uidocument/state)


https://developer.apple.com/documentation/uikit/uidocument/useractivityurlkey)


https://developer.apple.com/documentation/uikit/uidocument/statechangedmessage)


https://developer.apple.com/documentation/uikit/using-responders-and-the-responder-chain-to-handle-events

  • UIKit
  • Touches, presses, and gestures
  • Using responders and the responder chain to handle events

Article

Using responders and the responder chain to handle events

Learn how to handle events that propagate through your app.

Overview

Apps receive and handle events using responder objects. A responder object is any instance of the UIResponder class, and common subclasses include UIView, UIViewController, and UIApplication. Responders receive the raw event data and must either handle the event or forward it to another responder object. When your app receives an event, UIKit automatically directs that event to the most appropriate responder object, known as the first responder.

Unhandled events are passed from responder to responder in the active responder chain, which is the dynamic configuration of your apps responder objects. The following image shows the responders in an app whose interface contains a label, a text field, a button, and two background views. The diagram also shows how events move from one responder to the next, following the responder chain.

If the text field doesnt handle an event, UIKit sends the event to the text fields parent UIView object, followed by the root view of the window. From the root view, the responder chain diverts to the owning view controller before directing the event to the window. If the window cant handle the event, UIKit delivers the event to the UIApplication object, and possibly to the app delegate if that object is an instance of UIResponder and not already part of the responder chain.

Determine an events first responder

UIKit designates an object as the first responder to an event based on the type of that event. Event types include:

Event type First responder
Touch events The view in which the touch occurred.
Press events The object that has focus.
Shake-motion events The object that you (or UIKit) designate.
Remote-control events The object that you (or UIKit) designate.
Editing menu messages The object that you (or UIKit) designate.

Controls communicate directly with their associated target object using action messages. When the user interacts with a control, the control sends an action message to its target object. Action messages arent events, but they may still take advantage of the responder chain. When the target object of a control is nil, UIKit starts from the target object and traverses the responder chain until it finds an object that implements the appropriate action method. For example, the UIKit editing menu uses this behavior to search for responder objects that implement methods with names like cut(_:), copy(_:), or paste(_:).

Gesture recognizers receive touch and press events before their view does. If a views gesture recognizers fail to recognize a sequence of touches, UIKit sends the touches to the view. If the view doesnt handle the touches, UIKit passes them up the responder chain. For more information about using gesture recognizers to handle events, see Handling UIKit gestures.

Determine which responder contained a touch event

UIKit uses view-based hit-testing to determine where touch events occur. Specifically, UIKit compares the touch location to the bounds of view objects in the view hierarchy. The hitTest(_:with:) method of UIView traverses the view hierarchy, looking for the deepest subview that contains the specified touch, which becomes the first responder for the touch event.

When a touch occurs, UIKit creates a UITouch object and associates it with a view. As the touch location or other parameters change, UIKit updates the same UITouch object with the new information. The only property that doesnt change is the view. (Even when the touch location moves outside the original view, the value in the touchs view property doesnt change). When the touch ends, UIKit releases the UITouch object.

Alter the responder chain

You can alter the responder chain by overriding the next property of your responder objects. When you do this, the next responder is the object that you return.

Many UIKit classes already override this property and return specific objects, including:

  • UIView objects. If the view is the root view of a view controller, the next responder is the view controller; otherwise, the next responder is the views superview.

  • UIViewController objects.

  • If the view controllers view is the root view of a window, the next responder is the window object.

  • If the view controller was presented by another view controller, the next responder is the presenting view controller.

  • UIWindow objects. The windows next responder is the UIApplication object.

  • UIApplication object. The next responder is the app delegate, but only if the app delegate is an instance of UIResponder and isnt a view, view controller, or the app object itself.

See Also

Essentials

class UIResponder

An abstract interface for responding to and handling events.

class UIEvent

An object that describes a single user interaction with your app.


https://developer.apple.com/documentation/uikit/about-the-app-launch-sequence

  • UIKit
  • App and environment
  • Responding to the launch of your app
  • About the app launch sequence

Article

About the app launch sequence

Learn the order in which the system executes your code at app launch time.

Overview

An app launch involves a complex sequence of steps, most of which the system handles automatically. During the launch sequence, UIKit calls methods in your app delegate and scene delegate so you can prepare your app for user interaction and perform any tasks specific to your apps requirements. The following illustrates the individual steps of this launch sequence, from when the user or system launches your app to when the sequence completes:

  1. The system executes the main() function that Xcode provides in an Objective-C project, or thats available when you use @main in a Swift project.

  2. The main() function calls UIApplicationMain(_:_:_:_:), which creates an instance of UIApplication and your app delegate.

  3. UIKit calls the application(_:willFinishLaunchingWithOptions:) method in your app delegate.

  4. UIKit performs view controller state restoration, which results in the execution of additional methods in your app delegate and apps view controllers. For more information, see About the UI restoration process.

  5. UIKit calls your app delegates application(_:didFinishLaunchingWithOptions:) method.

  6. After the app launch completes, UIKit prepares a scene to connect to your app, and then calls scene(_:willConnectTo:options:). UIKit may deliver a user activity to this method for you to handle during scene connection.

After the launch sequence completes, the system displays your apps user interface and informs your app or scene delegates when life-cycle events occur.

Prepare your app for prewarming

In iOS 15 and later, the system may, depending on device conditions, prewarm your app — launch nonrunning application processes to reduce the amount of time the user waits before the app is usable. Prewarming executes an apps launch sequence up until, but not including, when main() calls UIApplicationMain(_:_:_:_:). This provides the system with an opportunity to build and cache any low-level structures it requires in anticipation of a full launch.

After the system prewarms your app, its launch sequence remains in a paused state until the app launches and the sequence resumes, or the system removes the prewarmed app from memory to reclaim resources. The system can prewarm your app after a device reboot, and periodically as system conditions allow.

If your app executes code before the call to UIApplicationMain(_:_:_:_:), such as in static initializers like load(), dont make assumptions about what services and resources are available. For example, keychain items may be unavailable because their data protection policies require an unlocked device and prewarming happens even when the device is in a locked state. If your code is dependent upon access to a specific service or resource, migrate that code to a later part of the launch sequence.

Prewarming an app results in an indeterminate amount of time between when the prewarming phase completes and when the user, or system, fully launches the app. Because of this, use MetricKit to accurately measure user-driven launch and resume times instead of manually signposting various points of the launch sequence.

See Also

Launch time

Performing one-time setup for your app

Ensure proper configuration of your app environment.

Return your app to its previous state after the system terminates it.


https://developer.apple.com/documentation/uikit/about-the-ui-preservation-process

  • UIKit
  • View controllers
  • Preserving your apps UI across launches
  • About the UI preservation process

Article

About the UI preservation process

Learn how to customize the UIKit state preservation process.

Overview

The following diagram shows the sequence of calls that happens during the interface preservation process. After asking your app delegate if you want your app state to be preserved, UIKit encodes the objects currently in your apps view controller hierarchy. Only view controllers with a valid restorationIdentifier are preserved.

The preservation process walks your view controller hierarchy and recursively encodes the objects that it finds. The process starts with the root view controllers of your apps windows, which write their data to the provided archive. If the root view controllers data includes references to other view controllers, UIKit asks each new view controller to encode its data in a separate portion of the archive. Those child view controllers may then encode their own children, and so on.

UIKit view controllers automatically encode their child view controllers, as appropriate. If you define a custom container view controller, your view controllers encodeRestorableState(with:) method must similarly write any child view controllers to the provided archive.

Exclude view controllers from preservation

There are two ways to exclude a view controller (and its views) from the state restoration process:

  • Set its restorationIdentifier property to nil.

  • Provide a restoration class and return nil from the viewController(withRestorationIdentifierPath:coder:) method.

Excluding a view controller prevents that view controller from being saved in the archive. It also excludes all of the view controllers children from being preserved.

Encode any object in your app

State restoration isnt limited to your apps views and view controllers. Any object that adopts the UIStateRestoring protocol can also be included in the restoration archive. For example, you might adopt this protocol in an object that stores global configuration data for your app. To add an object like this to the archive:

  1. Register the object while your app is running by calling the registerObject(forStateRestoration:restorationIdentifier:) method of UIApplication. For example, you might register a configuration object immediately after creating it.

  2. In one of your encodeRestorableState(with:) methods, encode the object into the restoration archive. You can also encode it in your app delegates application(_:willEncodeRestorableStateWith:) method.

You can encode any data you want for your custom objects, as long as its sufficient to return that object to its previous state during the next launch cycle. Encode data that isnt crucial to your apps behavior, and never encode data that should be persisted in other ways. For example, dont encode your apps settings or user data that must persist between launch cycles.

See Also

Process details

About the UI restoration process

Learn how to customize the UIKit state restoration process.


https://developer.apple.com/documentation/uikit/uiapplication/shared


https://developer.apple.com/documentation/uikit/uiwindow

  • UIKit
  • UIWindow

Class

UIWindow

The backdrop for your apps user interface and the object that dispatches events to your views.

tvOS

@MainActor class UIWindow

Mentioned in

Using responders and the responder chain to handle events

Overview

Windows work with your view controllers to handle events and to perform many other tasks that are fundamental to your apps operation. UIKit handles most window-related interactions, working with other objects as needed to implement many app behaviors.

You use windows only when you need to do the following:

  • Provide a main window to display your apps content.

  • Create additional windows (as needed) to display additional content.

Normally, Xcode provides your apps main window. New iOS projects use storyboards to define the apps views. Storyboards require the presence of a window property on the app delegate object, which the Xcode templates automatically provide. If your app doesnt use storyboards, you must create this window yourself.

Most apps need only one window, which displays the apps content on the devices main screen. Although you can create additional windows on the devices main screen, extra windows are commonly used to display content on an external screen, as described in Presenting content on a connected display.

You also use UIWindow objects for a handful of other tasks:

  • Setting the z-axis level of your window, which affects the visibility of the window relative to other windows.

  • Showing windows and making them the target of keyboard events.

  • Converting coordinate values to and from the windows coordinate system.

  • Changing the root view controller of a window.

  • Changing the screen on which the window is displayed.

Windows dont have any visual appearance of their own. Instead, a window hosts one or more views, which are managed by the windows root view controller. You configure the root view controller in your storyboards, adding whatever views are appropriate for your interface.

You should rarely need to subclass UIWindow. The kinds of behaviors you might implement in a window can usually be implemented in a higher-level view controller more easily. One of the few times you might want to subclass is to override the becomeKey() or resignKey() methods to implement custom behaviors when a windows key status changes. For information about how to display a window on a specific screen, see UIScreen.

Understand keyboard interactions

Whereas touch events are delivered to the window where they occurred, events that dont have a relevant coordinate value are delivered to the key window. Only one window at a time can be the key window, and you can use a windows isKeyWindow property to determine its status. Most of the time, your apps main window is the key window, but UIKit may designate a different window as needed.

If you need to know which window is key, observe the didBecomeKeyNotification and didResignKeyNotification notifications. The system sends those notifications on the main actor in response to key window changes in your app. To force a window become key, or to force a window to resign the key status, call the appropriate methods of this class.

Topics

Creating a window

init(windowScene: UIWindowScene)

Creates a window and associates it with the specified scene object.

Configuring the window

var rootViewController: UIViewController?

The root view controller for the window.

var windowLevel: UIWindow.Level

The position of the window in the z-axis.

struct Level

The positioning of windows relative to each other.

var canResizeToFitContent: Bool

A Boolean value that indicates whether the windows constraint-based content determines its size.

var screen: UIScreen

The screen to display the window on.

Deprecated

Making windows key

var isKeyWindow: Bool

A Boolean value that indicates whether the window is the key window.

var canBecomeKey: Bool

A Boolean value that indicates whether the window can become the key window.

func makeKeyAndVisible()

Shows the window and makes it the key window.

func makeKey()

Makes the window the key window.

func becomeKey()

Tells the window that its the key window.

func resignKey()

Tells the window that its no longer the key window.

var windowScene: UIWindowScene?

The scene containing the window.

var avDisplayManager: AVDisplayManager

The display manager that handles requests for screen resolution, refresh rate, and HDR mode information.

Converting coordinates

Converts a point from the current windows coordinate system to the coordinate system of another window.

Converts a point from the coordinate system of a given window to the coordinate system of the current window.

Converts a rectangle from the current windows coordinate system to the coordinate system of another window.

Converts a rectangle from the coordinate system of another window to coordinate system of the current window.

Sending events

func sendEvent(UIEvent)

Dispatches the specified event to its views.

class let didBecomeVisibleNotification: NSNotification.Name

A notification that posts when a window becomes visible.

class let didBecomeHiddenNotification: NSNotification.Name

A notification that posts when a window becomes hidden.

class let didBecomeKeyNotification: NSNotification.Name

A notification that posts whenever a window becomes the key window.

class let didResignKeyNotification: NSNotification.Name

A notification that posts whenever a window resigns its status as main window.

Responding to keyboard notifications

class let keyboardWillShowNotification: NSNotification.Name

A notification that posts immediately prior to displaying the keyboard.

class let keyboardDidShowNotification: NSNotification.Name

A notification that posts immediately after displaying the keyboard.

class let keyboardWillHideNotification: NSNotification.Name

A notification that posts immediately prior to dismissing the keyboard.

class let keyboardDidHideNotification: NSNotification.Name

A notification that posts immediately after dismissing the keyboard.

class let keyboardWillChangeFrameNotification: NSNotification.Name

A notification that posts immediately prior to a change in the keyboards frame.

class let keyboardDidChangeFrameNotification: NSNotification.Name

A notification that posts immediately after a change in the keyboards frame.

class let keyboardAnimationCurveUserInfoKey: String

A user info key to retrieve the animation curve that the system uses to animate the keyboard onto or off the screen.

class let keyboardAnimationDurationUserInfoKey: String

A user info key to retrieve the duration of the keyboard animation in seconds.

class let keyboardIsLocalUserInfoKey: String

A user info key to retrieve a Boolean value that indicates whether the keyboard belongs to the current app.

class let keyboardFrameBeginUserInfoKey: String

A user info key to retrieve the keyboards frame at the beginning of its animation.

class let keyboardFrameEndUserInfoKey: String

A user info key to retrieve the keyboards frame at the end of its animation.

Working with layout guides

var safeAreaAspectFitLayoutGuide: any UILayoutGuide & UILayoutGuideAspectFitting

A layout guide for placing content of a particular aspect ratio.

protocol UILayoutGuideAspectFitting

The interface for a layout guide that supports a particular aspect ratio.

Structures

struct DidBecomeHiddenMessage Beta

struct DidBecomeKeyMessage Beta

struct DidBecomeVisibleMessage Beta

struct DidResignKeyMessage Beta

Initializers

convenience init() Deprecated

init(frame: CGRect) Deprecated

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Windows

protocol UICoordinateSpace

A set of methods for converting between different frames of reference on a screen.


https://developer.apple.com/documentation/uikit/uiapplication/open(_:options:completionhandler:)

#app-main)

  • UIKit
  • UIApplication
  • open(_:options:completionHandler:)

Instance Method

open(_:options:completionHandler:)

Attempts to asynchronously open the resource at the specified URL.

@MainActor func open( _ url: URL, options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:],

) @MainActor func open( _ url: URL, options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:]

Parameters

url

A URL (Universal Resource Locator). The resource identified by this URL may be local to the current app or it may be one that must be provided by a different app. UIKit supports many common schemes, including the http, https, tel, facetime, and mailto schemes. You can also employ custom URL schemes associated with apps installed on the device.

options

A dictionary of options to use when opening the URL. For a list of possible keys to include in this dictionary, see UIApplication.OpenExternalURLOptionsKey.

completion

The block to execute with the results. Provide a value for this parameter if you want to be informed of the success or failure of opening the URL. This block is executed asynchronously on your apps main thread. The block has no return value and takes the following parameter:

success

A Boolean value that indicates whether the URL was opened successfully.

Discussion

Use this method to open the specified resource. If the specified URL scheme is handled by another app, iOS launches that app and passes the URL to it. (Launching the app brings the other app to the foreground.) If no app is capable of handling the specified scheme, the completion handler is called with the success parameter set to false.

To determine whether an app is installed that is capable of handling the URL, call the canOpenURL(_:) method before calling this one. Be sure to read the description of that method for an important note about registering the schemes you want to employ.

See Also

Opening a URL resource

Returns a Boolean value that indicates whether an app is available to handle a URL scheme.

struct OpenExternalURLOptionsKey

Options for opening a URL.


https://developer.apple.com/documentation/uikit/uiapplication/beginignoringinteractionevents()

#app-main)

  • UIKit
  • UIApplication
  • beginIgnoringInteractionEvents() Deprecated

Instance Method

beginIgnoringInteractionEvents()

Tells the receiver to suspend the handling of touch-related events.

iOS 2.013.0DeprecatediPadOS 2.013.0DeprecatedMac Catalyst 13.113.1DeprecatedtvOSDeprecated

@MainActor func beginIgnoringInteractionEvents()

Discussion

You typically call this method before starting an animation or transition. Calls are nested with the endIgnoringInteractionEvents() method.

See Also

Deprecated methods

Asks the system to activate an existing scene, or create a new scene and associate it with your app.

Deprecated

func endIgnoringInteractionEvents()

Tells the receiver to resume the handling of touch-related events.

func setMinimumBackgroundFetchInterval(TimeInterval)

Specifies the minimum amount of time that must elapse between background fetch operations.

func scheduleLocalNotification(UILocalNotification)

Schedules a local notification for delivery at its encapsulated date and time.

func presentLocalNotificationNow(UILocalNotification)

Presents a local notification immediately.

func cancelLocalNotification(UILocalNotification)

Cancels the delivery of the specified scheduled local notification.

func cancelAllLocalNotifications()

Cancels the delivery of all scheduled local notifications.

Configures a periodic handler for VoIP apps in older versions of iOS.

let UIMinimumKeepAliveTimeout: TimeInterval

The minimum amount of time (measured in seconds) an app may run a critical background task in the background.

func clearKeepAliveTimeout()

Removes a previously installed periodic handler block.

func setStatusBarHidden(Bool, with: UIStatusBarAnimation)

Hides or shows the status bar, optionally animating the transition.

func setStatusBarStyle(UIStatusBarStyle, animated: Bool)

Sets the style of the status bar, optionally animating the transition to the new style.

func setStatusBarOrientation(UIInterfaceOrientation, animated: Bool)

Sets the apps status bar to the specified orientation, optionally animating the transition.

func registerUserNotificationSettings(UIUserNotificationSettings)

Registers your preferred options for notifying the user.

func registerForRemoteNotifications(matching: UIRemoteNotificationType)

Register to receive remote notifications of the specified types via Apple Push Notification service.


https://developer.apple.com/documentation/uikit/uiapplication/registerforremotenotifications()

#app-main)

  • UIKit
  • UIApplication
  • registerForRemoteNotifications()

Instance Method

registerForRemoteNotifications()

Registers to receive remote notifications through Apple Push Notification service.

tvOS

@MainActor func registerForRemoteNotifications()

Discussion

Call this method to initiate the registration process with Apple Push Notification service. If registration succeeds, the app calls your app delegate objects application(_:didRegisterForRemoteNotificationsWithDeviceToken:) method and passes it a device token. You should pass this token along to the server you use to generate remote notifications for the device. If registration fails, the app calls its app delegates application(_:didFailToRegisterForRemoteNotificationsWithError:) method instead.

If you want your apps remote notifications to display alerts, play sounds, or perform other user-facing actions, you must request authorization to do so using the requestAuthorization(options:completionHandler:) method of UNUserNotificationCenter. If you do not request and receive authorization for your apps interactions, the system delivers all remote notifications to your app silently.

See Also

Registering for remote notifications

func unregisterForRemoteNotifications()

Unregisters for all remote notifications received through Apple Push Notification service.

var isRegisteredForRemoteNotifications: Bool

A Boolean value that indicates whether the app is currently registered for remote notifications.


https://developer.apple.com/documentation/uikit/uiapplication/applicationsupportsshaketoedit

  • UIKit
  • UIApplication
  • applicationSupportsShakeToEdit

Instance Property

applicationSupportsShakeToEdit

A Boolean value that determines whether shaking the device displays the undo-redo user interface.

@MainActor var applicationSupportsShakeToEdit: Bool { get set }

Discussion

The default value is true. Set the property to false if you dont want your app to display the Undo and Redo buttons when users shake the device.

See Also

Controlling and handling events

func sendEvent(UIEvent)

Dispatches an event to the appropriate responder objects in the app.

Sends an action message identified by the selector to a specified target.


https://developer.apple.com/documentation/uikit/uiapplication/canopenurl(_:)

#app-main)

  • UIKit
  • UIApplication
  • canOpenURL(_:)

Instance Method

canOpenURL(_:)

Returns a Boolean value that indicates whether an app is available to handle a URL scheme.

tvOS

nonisolated

Parameters

url

A URL (Universal Resource Locator). At runtime, the system determines if the device has an installed app registered to handle the URLs scheme. The device can have more than one app registered to handle a scheme.

The URL can have a common scheme such as http, https, tel, or facetime, or a custom scheme. For information about supported schemes, see Apple URL Scheme Reference.

Return Value

false if the device doesnt have an installed app registered to handle the URLs scheme, or if you havent declared the URLs scheme in your Info.plist file; otherwise, true.

Discussion

When this method returns true, iOS guarantees subsequent calls to the open(_:options:completionHandler:) method with the same URL will successfully launch an app that can handle the URL. The return value doesnt indicate the validity of the URL, whether the specified resource exists, or, in the case of a universal link, whether the device has an installed app registered to respond to the universal link.

You can call this method safely on a thread that isnt the main thread.

If you link your app against an earlier version of iOS but it is running in iOS 9.0 or later, you can call this method up to 50 times. After reaching that limit, subsequent calls always return false. If the user reinstalls or upgrades the app, iOS resets the limit.

Unlike this method, the open(_:options:completionHandler:) method isnt constrained by the LSApplicationQueriesSchemes requirement. If an app is available to handle the URL, the system will launch it, even if you havent declared the scheme.

Using universal links instead of custom URL schemes removes the need to use this method to validate target links; if no app is available to handle a universal link, iOS routes it to the persons default browser, allowing the associated website to respond. For more information on universal links, see Allowing apps and websites to link to your content.

See Also

Attempts to open the resource at the specified URL.

Deprecated

Opening a URL resource

Attempts to asynchronously open the resource at the specified URL.

struct OpenExternalURLOptionsKey

Options for opening a URL.


https://developer.apple.com/documentation/uikit/uiapplication/beginbackgroundtask(expirationhandler:)

#app-main)

  • UIKit
  • UIApplication
  • beginBackgroundTask(expirationHandler:)

Instance Method

beginBackgroundTask(expirationHandler:)

Marks the start of a task that should continue if the app enters the background.

tvOS

tvOS, visionOS

nonisolated

iOS, iPadOS, Mac Catalyst

Parameters

handler

A handler to be called shortly before the apps remaining background time reaches 0. Use this handler to clean up and mark the end of the background task. Failure to end the task explicitly will result in the termination of the app. The system calls the handler synchronously on the main thread, blocking the apps suspension momentarily.

Return Value

A unique identifier for the new background task. You must pass this value to the endBackgroundTask(_:) method to mark the end of this task. This method returns invalid if running in the background isnt possible.

Discussion

This method requests additional background execution time for your app. Call this method when leaving a task unfinished might be detrimental to your apps user experience. For example, call this method before writing data to a file to prevent the system from suspending your app while the operation is in progress. For background tasks requiring more time, use Background Tasks.

Call this method as early as possible before starting your task, preferably before your app actually enters the background. The method requests the task assertion for your app asynchronously. If you call this method shortly before your app is due to be suspended, theres a chance that the system might suspend your app before that task assertion is granted. For example, dont call this method at the very end of your applicationDidEnterBackground(_:) method and expect your app to continue running. If the system is unable to grant the task assertion, it calls your expiration handler.

Each call to this method must be balanced by a matching call to the endBackgroundTask(_:) method. Apps running background tasks have a finite amount of time in which to run them. (You can find out the maximum background time available using the backgroundTimeRemaining property.) If you dont call endBackgroundTask(_:) for each task before time expires, the system kills the app. If you provide a block object in the handler parameter, the system calls your handler before time expires to give you a chance to end the task.

You can call this method at any point in your apps execution. You may also call this method multiple times to mark the beginning of several background tasks that run in parallel. However, each task must be ended separately. You identify a given task using the value returned by this method.

To assist with debugging, this method generates a name for the task, based on the name of the calling method or function. If you want to specify a custom name, use the beginBackgroundTask(withName:expirationHandler:) method instead.

This method can be safely called on a non-main thread. To extend the execution time of an app extension, use the performExpiringActivity(withReason:using:) method of ProcessInfo instead.

See Also

Background Tasks

Support background processing in your app by wrapping your apps most critical work in framework-provided tasks.

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uiapplication/beginbackgroundtask(withname:expirationhandler:)

#app-main)

  • UIKit
  • UIApplication
  • beginBackgroundTask(withName:expirationHandler:)

Instance Method

beginBackgroundTask(withName:expirationHandler:)

Marks the start of a task with a custom name that should continue if the app enters the background.

tvOS

iOS, iPadOS, Mac Catalyst

nonisolated func beginBackgroundTask( withName taskName: String?,

tvOS, visionOS

Parameters

taskName

The name to display in the debugger when viewing the background task. If you specify nil for this parameter, the method generates a name based on the name of the calling function or method.

handler

A handler to be called shortly before the apps remaining background time reaches 0. Use this handler to clean up and mark the end of the background task. Failure to end the task explicitly will result in the termination of the app. The system calls the handler synchronously on the main thread, blocking the apps suspension momentarily.

Return Value

A unique identifier for the new background task. You must pass this value to the endBackgroundTask(_:) method to mark the end of this task. This method returns invalid if running in the background isnt possible.

Mentioned in

Extending your apps background execution time

Discussion

This method requests additional background execution time for your app. Call this method when leaving a task unfinished might be detrimental to your apps user experience. For example, call this method before writing data to a file to prevent the system from suspending your app while the operation is in progress. For background tasks requiring more time, use Background Tasks.

Call this method as early as possible before starting your task, preferably before your app actually enters the background. The method requests the task assertion for your app asynchronously. If you call this method shortly before your app is due to be suspended, theres a chance that the system might suspend your app before that task assertion is granted. For example, dont call this method at the very end of your applicationDidEnterBackground(_:) method and expect your app to continue running. If the system is unable to grant the task assertion, it calls your expiration handler.

Each call to this method must be balanced by a matching call to the endBackgroundTask(_:) method. Apps running background tasks have a finite amount of time in which to run them. (You can find out the maximum background time available using the backgroundTimeRemaining property.) If you dont call endBackgroundTask(_:) for each task before time expires, the system kills the app. If you provide a block object in the handler parameter, the system calls your handler before time expires to give you a chance to end the task.

You can call this method at any point in your apps execution. You may also call this method multiple times to mark the beginning of several background tasks that run in parallel. However, each task must be ended separately. You identify a given task using the value returned by this method.

This method can be safely called on a non-main thread. To extend the execution time of an app extension, use the performExpiringActivity(withReason:using:) method of ProcessInfo instead.

See Also

Background Tasks

Support background processing in your app by wrapping your apps most critical work in framework-provided tasks.

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uiapplication/schedulelocalnotification(_:)

#app-main)

  • UIKit
  • UIApplication
  • scheduleLocalNotification(_:) Deprecated

Instance Method

scheduleLocalNotification(_:)

Schedules a local notification for delivery at its encapsulated date and time.

iOS 4.010.0DeprecatediPadOS 4.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor func scheduleLocalNotification(_ notification: UILocalNotification)

Parameters

notification

The local notification object that you want to schedule. This object contains information about when to deliver the notification and what to do when that date occurs. The system keeps a copy of this object so you may release the object once it is scheduled.

Discussion

Prior to scheduling any local notifications, you must call the registerUserNotificationSettings(_:) method to let the system know what types of alerts, if any, you plan to display to the user.

See Also

Deprecated methods

Asks the system to activate an existing scene, or create a new scene and associate it with your app.

Deprecated

func beginIgnoringInteractionEvents()

Tells the receiver to suspend the handling of touch-related events.

func endIgnoringInteractionEvents()

Tells the receiver to resume the handling of touch-related events.

func setMinimumBackgroundFetchInterval(TimeInterval)

Specifies the minimum amount of time that must elapse between background fetch operations.

func presentLocalNotificationNow(UILocalNotification)

Presents a local notification immediately.

func cancelLocalNotification(UILocalNotification)

Cancels the delivery of the specified scheduled local notification.

func cancelAllLocalNotifications()

Cancels the delivery of all scheduled local notifications.

Configures a periodic handler for VoIP apps in older versions of iOS.

let UIMinimumKeepAliveTimeout: TimeInterval

The minimum amount of time (measured in seconds) an app may run a critical background task in the background.

func clearKeepAliveTimeout()

Removes a previously installed periodic handler block.

func setStatusBarHidden(Bool, with: UIStatusBarAnimation)

Hides or shows the status bar, optionally animating the transition.

func setStatusBarStyle(UIStatusBarStyle, animated: Bool)

Sets the style of the status bar, optionally animating the transition to the new style.

func setStatusBarOrientation(UIInterfaceOrientation, animated: Bool)

Sets the apps status bar to the specified orientation, optionally animating the transition.

func registerUserNotificationSettings(UIUserNotificationSettings)

Registers your preferred options for notifying the user.

func registerForRemoteNotifications(matching: UIRemoteNotificationType)

Register to receive remote notifications of the specified types via Apple Push Notification service.


https://developer.apple.com/documentation/uikit/uiapplication/cancellocalnotification(_:)

#app-main)

  • UIKit
  • UIApplication
  • cancelLocalNotification(_:) Deprecated

Instance Method

cancelLocalNotification(_:)

Cancels the delivery of the specified scheduled local notification.

iOS 4.010.0DeprecatediPadOS 4.010.0DeprecatedMac Catalyst 13.113.1Deprecated

@MainActor func cancelLocalNotification(_ notification: UILocalNotification)

Parameters

notification

The local notification to cancel.

Discussion

Calling this method also programmatically dismisses the notification if it is currently displaying an alert.

See Also

Deprecated methods

Asks the system to activate an existing scene, or create a new scene and associate it with your app.

Deprecated

func beginIgnoringInteractionEvents()

Tells the receiver to suspend the handling of touch-related events.

func endIgnoringInteractionEvents()

Tells the receiver to resume the handling of touch-related events.

func setMinimumBackgroundFetchInterval(TimeInterval)

Specifies the minimum amount of time that must elapse between background fetch operations.

func scheduleLocalNotification(UILocalNotification)

Schedules a local notification for delivery at its encapsulated date and time.

func presentLocalNotificationNow(UILocalNotification)

Presents a local notification immediately.

func cancelAllLocalNotifications()

Cancels the delivery of all scheduled local notifications.

Configures a periodic handler for VoIP apps in older versions of iOS.

let UIMinimumKeepAliveTimeout: TimeInterval

The minimum amount of time (measured in seconds) an app may run a critical background task in the background.

func clearKeepAliveTimeout()

Removes a previously installed periodic handler block.

func setStatusBarHidden(Bool, with: UIStatusBarAnimation)

Hides or shows the status bar, optionally animating the transition.

func setStatusBarStyle(UIStatusBarStyle, animated: Bool)

Sets the style of the status bar, optionally animating the transition to the new style.

func setStatusBarOrientation(UIInterfaceOrientation, animated: Bool)

Sets the apps status bar to the specified orientation, optionally animating the transition.

func registerUserNotificationSettings(UIUserNotificationSettings)

Registers your preferred options for notifying the user.

func registerForRemoteNotifications(matching: UIRemoteNotificationType)

Register to receive remote notifications of the specified types via Apple Push Notification service.


https://developer.apple.com/documentation/uikit/uiapplication/beginreceivingremotecontrolevents()

#app-main)

  • UIKit
  • UIApplication
  • beginReceivingRemoteControlEvents()

Instance Method

beginReceivingRemoteControlEvents()

Tells the app to begin receiving remote-control events.

tvOS

@MainActor func beginReceivingRemoteControlEvents()

Discussion

In iOS 7.1 and later, use the shared MPRemoteCommandCenter object to register for remote control events. You do not need to call this method when using the shared command center object.

This method starts the delivery of remote control events using the responder chain. Remote-control events originate as commands issued by headsets and external accessories that are intended to control multimedia presented by an app. To stop the reception of remote-control events, you must call endReceivingRemoteControlEvents().

See Also

Receiving remote control events

func endReceivingRemoteControlEvents()

Tells the app to stop receiving remote-control events.


https://developer.apple.com/documentation/uikit/uiapplication/endreceivingremotecontrolevents()

#app-main)

  • UIKit
  • UIApplication
  • endReceivingRemoteControlEvents()

Instance Method

endReceivingRemoteControlEvents()

Tells the app to stop receiving remote-control events.

tvOS

@MainActor func endReceivingRemoteControlEvents()

Discussion

In iOS 7.1 and later, use the shared MPRemoteCommandCenter object to unregister for remote control events. You do not need to call this method when using the shared command center object.

This method stops the delivery of remote control events using the responder chain. Remote-control events originate as commands issued by headsets and external accessories that are intended to control multimedia presented by an app.

See Also

Receiving remote control events

func beginReceivingRemoteControlEvents()

Tells the app to begin receiving remote-control events.


https://developer.apple.com/documentation/uikit/uiapplication/sendevent(_:)

#app-main)

  • UIKit
  • UIApplication
  • sendEvent(_:)

Instance Method

sendEvent(_:)

Dispatches an event to the appropriate responder objects in the app.

tvOS

@MainActor func sendEvent(_ event: UIEvent)

Parameters

event

A UIEvent object encapsulating the information about an event, including the touches involved.

Discussion

If you require it, you can intercept incoming events by subclassing UIApplication and overriding this method. For every event you intercept, you must dispatch it by calling [super sendEvent:event] after handling the event in your implementation.

See Also

Controlling and handling events

Sends an action message identified by the selector to a specified target.

var applicationSupportsShakeToEdit: Bool

A Boolean value that determines whether shaking the device displays the undo-redo user interface.


https://developer.apple.com/documentation/uikit/uiapplication/sendaction(_:to:from:for:)

#app-main)

  • UIKit
  • UIApplication
  • sendAction(_:to:from:for:)

Instance Method

sendAction(_:to:from:for:)

Sends an action message identified by the selector to a specified target.

tvOS

@MainActor func sendAction( _ action: Selector, to target: Any?, from sender: Any?, for event: UIEvent?

Parameters

action

A selector identifying an action method. See the discussion for information on the permitted selector forms.

target

The object to receive the action message. If target is nil, the app sends the message to the first responder, from whence it progresses up the responder chain until it is handled.

sender

The object that is sending the action message. The default sender is the UIControl object that invokes this method.

event

A UIEvent object that encapsulates information about the event originating the action message.

Return Value

true if a responder object handled the action message, false if no object in the responder chain handled the message.

Discussion

Normally, this method is invoked by a UIControl object that the user has touched. The default implementation dispatches the action method to the given target object or, if no target is specified, to the first responder. Subclasses may override this method to perform special dispatching of action messages.

By default, this method pushes two parameters when calling the target. These last two parameters are optional for the receiver because it is up to the caller (usually a UIControl object) to remove any parameters it added. This design enables the action selector to be one of the following:

  • - (void)action

  • - (void)action:(id)sender

  • - (void)action:(id)sender forEvent:(UIEvent *)event

See Also

Controlling and handling events

func sendEvent(UIEvent)

Dispatches an event to the appropriate responder objects in the app.

var applicationSupportsShakeToEdit: Bool

A Boolean value that determines whether shaking the device displays the undo-redo user interface.


https://developer.apple.com/documentation/uikit/uiapplication/delegate

  • UIKit
  • UIApplication
  • delegate

Instance Property

delegate

The delegate of the app object.

tvOS

@MainActor unowned(unsafe) var delegate: (any UIApplicationDelegate)? { get set }

Discussion

Every app must have an app delegate object to respond to app-related messages. For example, the app notifies its delegate when the app finishes launching and when its foreground or background execution status changes. Similarly, app-related messages coming from the system are often routed to the app delegate for handling. Xcode provides an initial app delegate for every app and you should not need to change this delegate later.

The delegate must adopt the UIApplicationDelegate formal protocol.

See Also

Configuring your apps behavior

protocol UIApplicationDelegate

A set of methods to manage shared behaviors for your app.


https://developer.apple.com/documentation/uikit/uiapplication/unregisterforremotenotifications()

#app-main)

  • UIKit
  • UIApplication
  • unregisterForRemoteNotifications()

Instance Method

unregisterForRemoteNotifications()

Unregisters for all remote notifications received through Apple Push Notification service.

tvOS

@MainActor func unregisterForRemoteNotifications()

Discussion

You should call this method in rare circumstances only, such as when a new version of the app removes support for all types of remote notifications. Users can temporarily prevent apps from receiving remote notifications through the Notifications section of the Settings app. Apps unregistered through this method can always re-register.

See Also

Registering for remote notifications

func registerForRemoteNotifications()

Registers to receive remote notifications through Apple Push Notification service.

var isRegisteredForRemoteNotifications: Bool

A Boolean value that indicates whether the app is currently registered for remote notifications.


https://developer.apple.com/documentation/uikit/uiapplication/isregisteredforremotenotifications

  • UIKit
  • UIApplication
  • isRegisteredForRemoteNotifications

Instance Property

isRegisteredForRemoteNotifications

A Boolean value that indicates whether the app is currently registered for remote notifications.

tvOS

@MainActor var isRegisteredForRemoteNotifications: Bool { get }

Discussion

This method reflects whether the remote registration process completed successfully—a process that begins when you call the registerForRemoteNotifications() method. This method does not reflect whether remote notifications are actually available due to connectivity issues. The value returned by this method takes into account the users preferences for receiving remote notifications.

See Also

Registering for remote notifications

func registerForRemoteNotifications()

Registers to receive remote notifications through Apple Push Notification service.

func unregisterForRemoteNotifications()

Unregisters for all remote notifications received through Apple Push Notification service.


https://developer.apple.com/documentation/uikit/uiapplication/applicationstate

  • UIKit
  • UIApplication
  • applicationState

Instance Property

applicationState

The apps current state, or that of its most active scene.

tvOS

@MainActor var applicationState: UIApplication.State { get }

Discussion

The behavior of this property depends on whether your app is scene-based.

In a scene-based app, this property takes the value of the most active scene, which it determines from each scenes activationState property. A scene-based app launches in the background state, and transitions between its states as scenes connect, change their states, and disconnect. For scene-based apps, use UISceneDelegate to respond to changes in an individual scenes life cycle.

In a sceneless app, the propertys value is always the apps current state. The app is inactive at launch, and then is generally in either an active or background state. The app may become inactive for a short period — for example, when transitioning between active and background states, when the system presents an alert in front of it, or when the system displays the application switcher. For sceneless apps, use UIApplicationDelegate to respond to the apps life cycle changes.

See Also

Getting the application state

enum State

Constants that indicate the running states of an app.


https://developer.apple.com/documentation/uikit/uiapplication/state

  • UIKit
  • UIApplication
  • UIApplication.State

Enumeration

UIApplication.State

Constants that indicate the running states of an app.

tvOS

enum State

Topics

Constants

case active

The app is running in the foreground and currently receiving events.

case inactive

The app is running in the foreground but isnt receiving events.

case background

The app is running in the background.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Getting the application state

var applicationState: UIApplication.State

The apps current state, or that of its most active scene.


https://developer.apple.com/documentation/uikit/uiapplication/supportsmultiplescenes

  • UIKit
  • UIApplication
  • supportsMultipleScenes

Instance Property

supportsMultipleScenes

A Boolean value that indicates whether the app may display multiple scenes simultaneously.

@MainActor var supportsMultipleScenes: Bool { get }

Discussion

UIKit sets this property to true when the system allows the app to display multiple scenes and the apps Info.plist file includes the UIApplicationSupportsMultipleScenes key with a value of true. If either of those conditions isnt true, the value of this property is false.

Use the connectedScenes property to determine whether multiple scenes are present.

See Also

Getting scene information

The apps currently connected scenes.

The sessions whose scenes are either currently active or archived by the system.


https://developer.apple.com/documentation/uikit/uiapplication/connectedscenes


https://developer.apple.com/documentation/uikit/uiapplication/opensessions


https://developer.apple.com/documentation/uikit/uiapplication/activatescenesession(for:errorhandler:)

#app-main)

  • UIKit
  • UIApplication
  • activateSceneSession(for:errorHandler:)

Instance Method

activateSceneSession(for:errorHandler:)

Asks the system to activate an existing scene or create a new scene and associate it with your app.

Mac CatalystvisionOS

@MainActor @preconcurrency func activateSceneSession( for request: UISceneSessionActivationRequest,

)

Parameters

request

The activation request.

errorHandler

A handler to call if the request fails.

See Also

Asks the system to activate an existing scene, or create a new scene and associate it with your app.

Deprecated

Managing a scenes life cycle

Asks the system to dismiss an existing scene and remove it from the app switcher.

func requestSceneSessionRefresh(UISceneSession)

Asks the system to update any system UI associated with the specified scene.

struct UISceneSessionActivationRequest

A collection of properties that you use to request activation of a scene.

class ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.


https://developer.apple.com/documentation/uikit/uiapplication/requestscenesessiondestruction(_:options:errorhandler:)

#app-main)

  • UIKit
  • UIApplication
  • requestSceneSessionDestruction(_:options:errorHandler:)

Instance Method

requestSceneSessionDestruction(_:options:errorHandler:)

Asks the system to dismiss an existing scene and remove it from the app switcher.

@MainActor func requestSceneSessionDestruction( _ sceneSession: UISceneSession, options: UISceneDestructionRequestOptions?,

)

Parameters

sceneSession

The session whose scene you want to remove from the screen and app switcher.

options

Information for the system to use when dismissing the scene. For information about how to create this object, see UISceneDestructionRequestOptions.

errorHandler

An error handler block to execute if a problem occurs. The method does not execute this block when it successfully dismisses the scene. This block has no return value and has the following parameter:

error

The NSError object describing the problem that occurred.

Discussion

If the specified scene is onscreen, calling this method dismisses it using the specified options. The method sends a disconnect notification to the scene and then calls your app delegates application(_:didDiscardSceneSessions:) method.

See Also

Managing a scenes life cycle

Asks the system to activate an existing scene or create a new scene and associate it with your app.

func requestSceneSessionRefresh(UISceneSession)

Asks the system to update any system UI associated with the specified scene.

struct UISceneSessionActivationRequest

A collection of properties that you use to request activation of a scene.

class ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.


https://developer.apple.com/documentation/uikit/uiapplication/requestscenesessionrefresh(_:)

#app-main)

  • UIKit
  • UIApplication
  • requestSceneSessionRefresh(_:)

Instance Method

requestSceneSessionRefresh(_:)

Asks the system to update any system UI associated with the specified scene.

@MainActor func requestSceneSessionRefresh(_ sceneSession: UISceneSession)

Parameters

sceneSession

The session whose scene you want to update.

Discussion

Call this method when your scene is in the background and any part of your scenes visible appearance changes. For example, call this method after updating your scenes content to let the system know your scenes snapshot requires refreshing. You dont need to call this method when your scene is running in the foreground.

See Also

Managing a scenes life cycle

Asks the system to activate an existing scene or create a new scene and associate it with your app.

Asks the system to dismiss an existing scene and remove it from the app switcher.

struct UISceneSessionActivationRequest

A collection of properties that you use to request activation of a scene.

class ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.


https://developer.apple.com/documentation/uikit/uiscenesessionactivationrequest-swift.struct

  • UIKit
  • UISceneSessionActivationRequest

Structure

UISceneSessionActivationRequest

A collection of properties that you use to request activation of a scene.

Mac CatalystvisionOS

struct UISceneSessionActivationRequest

Overview

A UISceneSessionActiviationRequest object provides information about how to activate a scene session. Create a request to specify:

  • A user activity for the scene session.

  • An existing scene session.

  • A scene session with a specific role.

You create a UISceneSessionActivationRequest object in your code, then you pass it as a parameter when you call activateSceneSession(for:errorHandler:) to ask the system to activate the scene session.

Topics

Creating a request

init(role: UISceneSession.Role, userActivity: NSUserActivity?, options: UIScene.ActivationRequestOptions?)

Creates a scene session activation request object with a role, a user activity, and options that you provide.

init(session: UISceneSession, userActivity: NSUserActivity?, options: UIScene.ActivationRequestOptions?)

Creates a scene session activation request object with a scene session, a user activity, and options that you provide.

Managing request details

var options: UIScene.ActivationRequestOptions?

Activation request options to further customize the request.

var role: UISceneSession.Role

The role to request.

var session: UISceneSession?

The specific scene session to activate.

var userActivity: NSUserActivity?

A user activity to send to the newly activated scene.

Initializers

Creates a UISceneSessionActivationRequest customized to open a SwiftUI scene.

Creates a UISceneSessionActivationRequest customized to open a SwiftUI scene with the given identifier.

Creates a UISceneSessionActivationRequest customized to open a SwiftUI scene with the given identifier and presented value.

Creates a UISceneSessionActivationRequest customized to open a SwiftUI scene with a presented value.

Relationships

Conforms To

  • Equatable
  • Hashable

See Also

Managing a scenes life cycle

Asks the system to activate an existing scene or create a new scene and associate it with your app.

Asks the system to dismiss an existing scene and remove it from the app switcher.

func requestSceneSessionRefresh(UISceneSession)

Asks the system to update any system UI associated with the specified scene.

class ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.


https://developer.apple.com/documentation/uikit/uiscene/activationrequestoptions

  • UIKit
  • UIScene
  • UIScene.ActivationRequestOptions

Class

UIScene.ActivationRequestOptions

An object that contains information you want the system to use when activating the session associated with a scene.

@MainActor class ActivationRequestOptions

Overview

Create a UIScene.ActivationRequestOptions object before you activate or create a scene using the activateSceneSession(for:errorHandler:) (Swift) or activateSceneSessionForRequest:errorHandler: (Objective-C) method of UIApplication. Use this object to specify which of your apps existing scenes originated the request for the new scene.

Topics

Specifying the originator of the request

var requestingScene: UIScene?

The scene object that requested the activation of a different scene.

Specifying collection join behavior

var collectionJoinBehavior: UISceneCollectionJoinBehavior

The behavior that specifies how a new scene joins a scene collection.

enum UISceneCollectionJoinBehavior

A set of behaviors that specify how a new scene joins a scene collection.

Relationships

Inherits From

  • NSObject

Inherited By

  • UIWindowScene.ActivationRequestOptions

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Managing a scenes life cycle

Asks the system to activate an existing scene or create a new scene and associate it with your app.

Asks the system to dismiss an existing scene and remove it from the app switcher.

func requestSceneSessionRefresh(UISceneSession)

Asks the system to update any system UI associated with the specified scene.

struct UISceneSessionActivationRequest

A collection of properties that you use to request activation of a scene.

class UISceneDestructionRequestOptions

An object you pass to UIKit to permanently remove a scene and its associated session from your app.


https://developer.apple.com/documentation/uikit/uiscenedestructionrequestoptions


https://developer.apple.com/documentation/uikit/uiapplication/backgroundrefreshstatus

  • UIKit
  • UIApplication
  • backgroundRefreshStatus

Instance Property

backgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

@MainActor var backgroundRefreshStatus: UIBackgroundRefreshStatus { get }

Discussion

You can use this property to determine whether Background App Refresh—an apps ability to open in the background to perform refresh tasks—is enabled, and warn the user if it is not. Dont warn the user if the value of this property is set to UIBackgroundRefreshStatus.restricted. A restricted user, such as one who is managed under parental controls, cant enable Background App Refresh.

Background App Refresh is disabled automatically when a device is operating in low-power mode. When this happens, the time available for performing background tasks is reduced to save power.

See Also

Managing background tasks

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uibackgroundrefreshstatus

  • UIKit
  • UIBackgroundRefreshStatus

Enumeration

UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

enum UIBackgroundRefreshStatus

Topics

Constants

case restricted

Background updates are unavailable and the user cannot enable them again.

case denied

The user explicitly disabled background behavior for this app or for the whole system.

case available

Background updates are available for the app.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uiapplication/backgroundrefreshstatusdidchangenotification

  • UIKit
  • UIApplication
  • backgroundRefreshStatusDidChangeNotification

Type Property

backgroundRefreshStatusDidChangeNotification

A notification that posts when the apps status for downloading content in the background changes.

nonisolated class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

Discussion

The system sends this notification when the backgroundRefreshStatus property of the app object changes. That property can change in response to the user disabling multitasking support for the app. The object of the notification is the UIApplication object. There is no userInfo dictionary.

See Also

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uiapplication/endbackgroundtask(_:)

#app-main)

  • UIKit
  • UIApplication
  • endBackgroundTask(_:)

Instance Method

endBackgroundTask(_:)

Marks the end of a specific long-running background task.

tvOS

nonisolated func endBackgroundTask(_ identifier: UIBackgroundTaskIdentifier)

Parameters

identifier

An identifier returned by the beginBackgroundTask(expirationHandler:) method.

Mentioned in

Extending your apps background execution time

Discussion

You must call this method to end a task that was started using the beginBackgroundTask(expirationHandler:) method. If you do not, the system may terminate your app.

This method can be safely called on a non-main thread.

See Also

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uibackgroundtaskidentifier

  • UIKit
  • UIBackgroundTaskIdentifier

Structure

UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.

iOSiPadOSMac CatalysttvOSvisionOS

struct UIBackgroundTaskIdentifier

Topics

Identifier

static let invalid: UIBackgroundTaskIdentifier

A token that indicates an invalid task request.

Initializers

init(rawValue: Int)

Creates a new instance with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

var backgroundTimeRemaining: TimeInterval

The maximum amount of time remaining for the app to run in the background.


https://developer.apple.com/documentation/uikit/uiapplication/backgroundtimeremaining

  • UIKit
  • UIApplication
  • backgroundTimeRemaining

Instance Property

backgroundTimeRemaining

The maximum amount of time remaining for the app to run in the background.

tvOS

nonisolated var backgroundTimeRemaining: TimeInterval { get }

Mentioned in

Extending your apps background execution time

Discussion

The value is valid only after the app enters the background and has started at least one task using beginBackgroundTask(expirationHandler:) in the foreground.

System conditions may end background execution earlier, either by calling the expiration handler, or by terminating the app.

This method can be safely called on a non-main thread.

See Also

Managing background tasks

var backgroundRefreshStatus: UIBackgroundRefreshStatus

Indicates whether the app can refresh content when running in the background.

enum UIBackgroundRefreshStatus

Constants that indicate whether background execution is enabled for the app.

class let backgroundRefreshStatusDidChangeNotification: NSNotification.Name

A notification that posts when the apps status for downloading content in the background changes.

Marks the start of a task with a custom name that should continue if the app enters the background.

Marks the start of a task that should continue if the app enters the background.

func endBackgroundTask(UIBackgroundTaskIdentifier)

Marks the end of a specific long-running background task.

struct UIBackgroundTaskIdentifier

A unique token that identifies a request to run in the background.


https://developer.apple.com/documentation/uikit/uiapplication/backgroundfetchintervalminimum


https://developer.apple.com/documentation/uikit/uiapplication/backgroundfetchintervalnever

  • UIKit
  • UIApplication
  • backgroundFetchIntervalNever

Type Property

backgroundFetchIntervalNever

A fetch interval large enough to prevent fetch operations from occurring.

class let backgroundFetchIntervalNever: TimeInterval

See Also

Fetching content in the background

class let backgroundFetchIntervalMinimum: TimeInterval

The smallest fetch interval supported by the system.


https://developer.apple.com/documentation/uikit/uiapplication/openexternalurloptionskey

  • UIKit
  • UIApplication
  • UIApplication.OpenExternalURLOptionsKey

Structure

UIApplication.OpenExternalURLOptionsKey

Options for opening a URL.

iOSiPadOSMac CatalysttvOSvisionOS

struct OpenExternalURLOptionsKey

Topics

URL options

static let universalLinksOnly: UIApplication.OpenExternalURLOptionsKey

URLs must be universal links and have an app configured to open them.

Measuring ad taps

static let eventAttribution: UIApplication.OpenExternalURLOptionsKey

An object you use to send tap event attribution data to the browser for Private Click Measurement.

Initializers

init(rawValue: String)

Creates a new instance with the specified raw value.

Relationships

Conforms To

  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Opening a URL resource

Attempts to asynchronously open the resource at the specified URL.

Returns a Boolean value that indicates whether an app is available to handle a URL scheme.


https://developer.apple.com/documentation/uikit/uiapplication/opensettingsurlstring

  • UIKit
  • UIApplication
  • openSettingsURLString

Type Property

openSettingsURLString

The URL string you use to deep link to your apps custom settings in the Settings app.

tvOS

nonisolated class let openSettingsURLString: String

Discussion

Create a URL from this value and pass it to the open(_:options:completionHandler:) method to launch the Settings app and display your apps custom settings, if it has any.

// Create the URL that deep links to your app's custom settings. if let url = URL(string: UIApplication.openSettingsURLString) { // Ask the system to open that URL. await UIApplication.shared.open(url) }

// Create the URL that deep links to your app's custom settings. NSURL *url = [[NSURL alloc] initWithString:UIApplicationOpenSettingsURLString]; // Ask the system to open that URL. [[UIApplication sharedApplication] openURL:url
options:@{}
completionHandler:nil];

For design guidance, see Human Interface Guidelines.

See Also

Deep linking to custom settings

static let openNotificationSettingsURLString: String

The URL string you use to deep link to your apps notification settings in the Settings app.

let UIApplicationOpenNotificationSettingsURLString: String

A constant that provides the URL string you use to deep link to your apps notification settings in the Settings app.

Deprecated

class let openDefaultApplicationsSettingsURLString: String

The URL string used to select a default app in the Settings app.


https://developer.apple.com/documentation/uikit/uiapplication/opennotificationsettingsurlstring

  • UIKit
  • UIApplication
  • openNotificationSettingsURLString

Type Property

openNotificationSettingsURLString

The URL string you use to deep link to your apps notification settings in the Settings app.

Mac CatalysttvOSvisionOS

nonisolated static let openNotificationSettingsURLString: String

Discussion

Create a URL from this value and pass it to the open(_:options:completionHandler:) method to launch the Settings app and display your apps notification settings, if it has any.

// Create the URL that deep links to your app's notification settings. if let url = URL(string: UIApplication.openNotificationSettingsURLString) { // Ask the system to open that URL. await UIApplication.shared.open(url) }

See Also

Deep linking to custom settings

class let openSettingsURLString: String

The URL string you use to deep link to your apps custom settings in the Settings app.

let UIApplicationOpenNotificationSettingsURLString: String

A constant that provides the URL string you use to deep link to your apps notification settings in the Settings app.

Deprecated

class let openDefaultApplicationsSettingsURLString: String

The URL string used to select a default app in the Settings app.


https://developer.apple.com/documentation/uikit/uiapplicationopennotificationsettingsurlstring

  • UIKit
  • UIApplicationOpenNotificationSettingsURLString Deprecated

Global Variable

UIApplicationOpenNotificationSettingsURLString

A constant that provides the URL string you use to deep link to your apps notification settings in the Settings app.

iOS 15.416.0DeprecatediPadOS 15.416.0DeprecatedMac Catalyst 15.416.0DeprecatedtvOS 15.416.0DeprecatedvisionOS 1.01.0DeprecatedwatchOS 8.59.0Deprecated

nonisolated let UIApplicationOpenNotificationSettingsURLString: String

Discussion

Create a URL from this value and pass it to the open(_:options:completionHandler:) method to launch the Settings app and display your apps notification settings, if it has any.

// Create the URL that deep links to your app's notification settings. NSURL *url = [[NSURL alloc] initWithString:UIApplicationOpenNotificationSettingsURLString]; // Ask the system to open that URL. [[UIApplication sharedApplication] openURL:url
options:@{}
completionHandler:nil];

See Also

Deep linking to custom settings

class let openSettingsURLString: String

The URL string you use to deep link to your apps custom settings in the Settings app.

static let openNotificationSettingsURLString: String

The URL string you use to deep link to your apps notification settings in the Settings app.

class let openDefaultApplicationsSettingsURLString: String

The URL string used to select a default app in the Settings app.


https://developer.apple.com/documentation/uikit/uiapplication/opendefaultapplicationssettingsurlstring

  • UIKit
  • UIApplication
  • openDefaultApplicationsSettingsURLString

Type Property

openDefaultApplicationsSettingsURLString

The URL string used to select a default app in the Settings app.

nonisolated class let openDefaultApplicationsSettingsURLString: String

Discussion

Create a URL from this value and pass it to the open(_:options:completionHandler:) method to launch the Settings app and display your apps custom settings, if it has any:

// Create the URL that links to the Settings app for default app selection. if let url = URL(string: UIApplication.openDefaultApplicationsSettingsURLString) { // Ask the system to open that URL. await UIApplication.shared.open(url) }

// Create the URL that links to the Settings app for default app selection. NSURL *url = [[NSURL alloc] initWithString:UIApplicationOpenDefaultApplicationsSettingsURLString]; // Ask the system to open that URL. [[UIApplication sharedApplication] openURL:url
options:@{}
completionHandler:nil];

See Also

Deep linking to custom settings

class let openSettingsURLString: String

The URL string you use to deep link to your apps custom settings in the Settings app.

static let openNotificationSettingsURLString: String

The URL string you use to deep link to your apps notification settings in the Settings app.

let UIApplicationOpenNotificationSettingsURLString: String

A constant that provides the URL string you use to deep link to your apps notification settings in the Settings app.

Deprecated


https://developer.apple.com/documentation/uikit/uiapplication/isidletimerdisabled

  • UIKit
  • UIApplication
  • isIdleTimerDisabled

Instance Property

isIdleTimerDisabled

A Boolean value that controls whether the idle timer is disabled for the app.

tvOS

@MainActor var isIdleTimerDisabled: Bool { get set }

Discussion

The default value of this property is false. When most apps have no touches as user input for a short period, the system puts the device into a “sleep” state where the screen dims. This is done for the purposes of conserving power. However, apps that dont have user input except for the accelerometer — games, for instance — can, by setting this property to true, disable the “idle timer” to avert system sleep.


https://developer.apple.com/documentation/uikit/uiapplication/extendstaterestoration()

#app-main)

  • UIKit
  • UIApplication
  • extendStateRestoration()

Instance Method

extendStateRestoration()

Tells the app that your code is restoring state asynchronously.

tvOS

@MainActor func extendStateRestoration()

Discussion

UIKit restores your apps state synchronously on the main thread. If you choose to perform additional state restoration on a secondary thread, call this method to inform UIKit of that fact. You must balance each call to this method with a matching call to the completeStateRestoration() method.

Calling this method is a safety precaution in the event that your app crashes at launch time due to problems restoring its state. If you call this method but do not call the matching completeStateRestoration() method before a crash occurs, the system throws away any saved state information. Doing so prevents your app from crashing during subsequent launches because of issues caused by trying to restore your apps state.

See Also

Managing state restoration

func completeStateRestoration()

Tells the app that your code has finished any asynchronous state restoration.

func ignoreSnapshotOnNextApplicationLaunch()

Prevents the app from using the recent snapshot image during the next launch cycle.

class func registerObject(forStateRestoration: any UIStateRestoring, restorationIdentifier: String)

Registers a custom object for use with the state restoration system.


https://developer.apple.com/documentation/uikit/uiapplication/completestaterestoration()

#app-main)

  • UIKit
  • UIApplication
  • completeStateRestoration()

Instance Method

completeStateRestoration()

Tells the app that your code has finished any asynchronous state restoration.

tvOS

@MainActor func completeStateRestoration()

Discussion

UIKit restores your apps state synchronously on the main thread. If you choose to perform additional state restoration on a secondary thread, call the extendStateRestoration() method to inform UIKit of that fact. Call this method after you finish with your background work to let the system know that state restoration is complete.

See Also

Managing state restoration

func extendStateRestoration()

Tells the app that your code is restoring state asynchronously.

func ignoreSnapshotOnNextApplicationLaunch()

Prevents the app from using the recent snapshot image during the next launch cycle.

class func registerObject(forStateRestoration: any UIStateRestoring, restorationIdentifier: String)

Registers a custom object for use with the state restoration system.


https://developer.apple.com/documentation/uikit/uiapplication/ignoresnapshotonnextapplicationlaunch()

#app-main)

  • UIKit
  • UIApplication
  • ignoreSnapshotOnNextApplicationLaunch()

Instance Method

ignoreSnapshotOnNextApplicationLaunch()

Prevents the app from using the recent snapshot image during the next launch cycle.

tvOS

@MainActor func ignoreSnapshotOnNextApplicationLaunch()

Discussion

As part of the state preservation process, UIKit captures your apps user interface and stores it in an image file. When your app is relaunched, the system displays this snapshot image in place of your apps default launch image to preserve the notion that your app was still running. If you feel that the snapshot cannot correctly reflect your apps user interface when your app is relaunched, call this method to let UIKit know that it should use your apps default launch image instead of the snapshot.

You must call this method from within the code you use to preserve your apps state.

See Also

Managing state restoration

func extendStateRestoration()

Tells the app that your code is restoring state asynchronously.

func completeStateRestoration()

Tells the app that your code has finished any asynchronous state restoration.

class func registerObject(forStateRestoration: any UIStateRestoring, restorationIdentifier: String)

Registers a custom object for use with the state restoration system.


https://developer.apple.com/documentation/uikit/uiapplication/registerobject(forstaterestoration:restorationidentifier:)

#app-main)

  • UIKit
  • UIApplication
  • registerObject(forStateRestoration:restorationIdentifier:)

Type Method

registerObject(forStateRestoration:restorationIdentifier:)

Registers a custom object for use with the state restoration system.

tvOS

@MainActor class func registerObject( forStateRestoration object: any UIStateRestoring, restorationIdentifier: String )

Parameters

object

The object to be registered with the restoration archive. The object must adopt the UIStateRestoring protocol. This parameter must not be nil.

restorationIdentifier

The restoration identifier for the object. UIKit uses this parameter to distinguish the object from other objects in the archive. This parameter must not be nil.

Mentioned in

About the UI preservation process

Discussion

You use this method to register objects that you want to save as part of the overall state restoration process. Registering the object makes it available for inclusion in the restoration archive but does not automatically include it. To include the object, refer to it from one of your other interface objects. For example, you might write out a reference to the object from the encodeRestorableState(with:) method of one of your view controllers.

See Also

Managing state restoration

func extendStateRestoration()

Tells the app that your code is restoring state asynchronously.

func completeStateRestoration()

Tells the app that your code has finished any asynchronous state restoration.

func ignoreSnapshotOnNextApplicationLaunch()

Prevents the app from using the recent snapshot image during the next launch cycle.


https://developer.apple.com/documentation/uikit/uiapplication/isprotecteddataavailable

  • UIKit
  • UIApplication
  • isProtectedDataAvailable

Instance Property

isProtectedDataAvailable

A Boolean value that indicates whether content protection is active.

tvOS

nonisolated var isProtectedDataAvailable: Bool { get }

Discussion

The value of this property is false if data protection is enabled and the device is currently locked. The value of this property is set to true if the device is unlocked or if content protection is not enabled.

When the value of this property is false, files that were assigned the complete or completeUnlessOpen protection key cannot be read or written by your app. The user must unlock the device before your app can access them.

See Also

Accessing protected content

class let protectedDataDidBecomeAvailableNotification: NSNotification.Name

A notification that posts when the protected files become available for your code to access.

class let protectedDataWillBecomeUnavailableNotification: NSNotification.Name

A notification that posts shortly before protected files are locked down and become inaccessible.


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatadidbecomeavailablenotification

  • UIKit
  • UIApplication
  • protectedDataDidBecomeAvailableNotification

Type Property

protectedDataDidBecomeAvailableNotification

A notification that posts when the protected files become available for your code to access.

tvOS

nonisolated class let protectedDataDidBecomeAvailableNotification: NSNotification.Name

Discussion

This notification does not contain a userInfo dictionary.

See Also

Accessing protected content

var isProtectedDataAvailable: Bool

A Boolean value that indicates whether content protection is active.

class let protectedDataWillBecomeUnavailableNotification: NSNotification.Name

A notification that posts shortly before protected files are locked down and become inaccessible.


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatawillbecomeunavailablenotification

  • UIKit
  • UIApplication
  • protectedDataWillBecomeUnavailableNotification

Type Property

protectedDataWillBecomeUnavailableNotification

A notification that posts shortly before protected files are locked down and become inaccessible.

tvOS

nonisolated class let protectedDataWillBecomeUnavailableNotification: NSNotification.Name

Discussion

Upon receiving this notification, clients should release any references to protected files. This notification does not contain a userInfo dictionary.

See Also

Accessing protected content

var isProtectedDataAvailable: Bool

A Boolean value that indicates whether content protection is active.

class let protectedDataDidBecomeAvailableNotification: NSNotification.Name

A notification that posts when the protected files become available for your code to access.


https://developer.apple.com/documentation/uikit/uiapplication/userinterfacelayoutdirection

  • UIKit
  • UIApplication
  • userInterfaceLayoutDirection

Instance Property

userInterfaceLayoutDirection

The layout direction of the user interface.

tvOS

@MainActor var userInterfaceLayoutDirection: UIUserInterfaceLayoutDirection { get }

Discussion

This method specifies the general user interface layout flow direction. See UIUserInterfaceLayoutDirection for a description of the constants returned by this property.

See Also

Accessing the layout direction

enum UIUserInterfaceLayoutDirection

Constants that specify the directional flow of the user interface.


https://developer.apple.com/documentation/uikit/uiuserinterfacelayoutdirection

  • UIKit
  • UIUserInterfaceLayoutDirection

Enumeration

UIUserInterfaceLayoutDirection

Constants that specify the directional flow of the user interface.

tvOS

enum UIUserInterfaceLayoutDirection

Overview

One of these constants is returned by the userInterfaceLayoutDirection property. It indicates the directionality of the language in the user interface of the app.

Topics

Constants

case leftToRight

The layout direction is left to right.

case rightToLeft

The layout direction right to left.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Accessing the layout direction

var userInterfaceLayoutDirection: UIUserInterfaceLayoutDirection

The layout direction of the user interface.


https://developer.apple.com/documentation/uikit/uiapplication/supportsalternateicons

  • UIKit
  • UIApplication
  • supportsAlternateIcons

Instance Property

supportsAlternateIcons

A Boolean value that indicates whether the app is allowed to change its icon.

@MainActor var supportsAlternateIcons: Bool { get }

Discussion

The value of this property is true only when the system allows you to change the icon of your app. To declare your apps alternate icons, include them in the CFBundleIcons key of your apps Info.plist file.

The value of this property is always false for apps built using the visionOS SDK.

See Also

Managing the apps icon

var alternateIconName: String?

The name of the icon the system displays for the app.

Changes the icon the system displays for the app.


https://developer.apple.com/documentation/uikit/uiapplication/alternateiconname

  • UIKit
  • UIApplication
  • alternateIconName

Instance Property

alternateIconName

The name of the icon the system displays for the app.

@MainActor var alternateIconName: String? { get }

Discussion

When the system is displaying one of your apps alternate icons, the value of this property is the name of the alternate icon (from your apps Info.plist file). When the system is displaying your apps primary icon, the value of this property is nil.

See Also

Managing the apps icon

var supportsAlternateIcons: Bool

A Boolean value that indicates whether the app is allowed to change its icon.

Changes the icon the system displays for the app.


https://developer.apple.com/documentation/uikit/uiapplication/setalternateiconname(_:completionhandler:)

#app-main)

  • UIKit
  • UIApplication
  • setAlternateIconName(_:completionHandler:)

Instance Method

setAlternateIconName(_:completionHandler:)

Changes the icon the system displays for the app.

@MainActor func setAlternateIconName( _ alternateIconName: String?,

) @MainActor func setAlternateIconName(_ alternateIconName: String?) async throws

Parameters

alternateIconName

The name of the alternate icon, as declared in the CFBundleAlternateIcons key of your apps Info.plist file. Specify nil if you want to display the apps primary icon, which you declare using the CFBundlePrimaryIcon key. Both keys are subentries of the CFBundleIcons key in your apps Info.plist file.

completionHandler

The handler to execute with the results. After attempting to change your apps icon, the system reports the results by calling your handler. The handler executes on a UIKit-provided queue, and not necessarily on your apps main queue. The handler has no return value and takes the following parameter:

error

On success, the value of this parameter is nil. If an error occurred, this parameter contains the error object indicating what happened and the value of the alternateIconName property remains unchanged.

Discussion

Use this method to change your apps icon to its primary icon or to one of its alternate icons. You can change the icon only if the value of the supportsAlternateIcons property is true.

You must configure your apps primary icon asset in the “App Icons and Launch Images” section of the General pane or set it directly using the “Primary App Icon Set Name” build setting. You specify the names of additional icon assets available to your app using the “Alternate App Icon Sets” build setting. Xcode uses these setting to generate the entries for CFBundlePrimaryIcon and CFBundleAlternateIcons under the top-level key CFBundleIcons. For more information, see Build settings reference and Configuring your app icon using an asset catalog.

See Also

Managing the apps icon

var supportsAlternateIcons: Bool

A Boolean value that indicates whether the app is allowed to change its icon.

var alternateIconName: String?

The name of the icon the system displays for the app.


https://developer.apple.com/documentation/uikit/uiapplication/preferredcontentsizecategory

  • UIKit
  • UIApplication
  • preferredContentSizeCategory

Instance Property

preferredContentSizeCategory

The font sizing option preferred by the user.

tvOS

@MainActor var preferredContentSizeCategory: UIContentSizeCategory { get }

Discussion

Users can request that apps display fonts in a size that is larger or smaller than the normal font size defined by the system. For example, a user with a visual impairment might request a larger default font size to make it easier to read text. Font objects returned by the system automatically scale based on the users preference. You can use the value of this property to request a font object of the appropriate size.

When the value of this property changes, the app object sends a didChangeNotification notification so that observers can respond accordingly.

For a list of possible values, see Content Size Category Constants and Accessibility Content Size Category Constants.

See Also

Managing the preferred content size

struct UIContentSizeCategory

Constants that indicate the preferred size of your content.

protocol UIContentSizeCategoryAdjusting

A collection of methods that give controls an easy way to adopt automatic adjustment to content category changes.

static let didChangeNotification: NSNotification.Name

A notification that posts when the user changes the preferred content size setting.

static let newValueUserInfoKey: String

A key that reflects the new preferred content size.


https://developer.apple.com/documentation/uikit/uicontentsizecategory

  • UIKit
  • UIContentSizeCategory

Structure

UIContentSizeCategory

Constants that indicate the preferred size of your content.

tvOS

struct UIContentSizeCategory

Topics

Font sizes

static let unspecified: UIContentSizeCategory

An unspecified font size.

static let extraSmall: UIContentSizeCategory

An extra-small font.

static let small: UIContentSizeCategory

A small font.

static let medium: UIContentSizeCategory

A medium-sized font.

static let large: UIContentSizeCategory

A large font.

static let extraLarge: UIContentSizeCategory

An extra-large font.

static let extraExtraLarge: UIContentSizeCategory

A font that is larger than the extra-large font but smaller than the largest font size available.

static let extraExtraExtraLarge: UIContentSizeCategory

The largest font size.

Accessibility sizes

static let accessibilityMedium: UIContentSizeCategory

A medium font size that reflects the current accessibility settings.

static let accessibilityLarge: UIContentSizeCategory

A large font size that reflects the current accessibility settings.

static let accessibilityExtraLarge: UIContentSizeCategory

An extra-large font size that reflects the current accessibility settings.

static let accessibilityExtraExtraLarge: UIContentSizeCategory

A font that is larger than the extra-large font but not the largest available, reflecting the current accessibility settings.

static let accessibilityExtraExtraExtraLarge: UIContentSizeCategory

The largest font size that reflects the current accessibility settings.

var isAccessibilityCategory: Bool

A Boolean value that indicates whether the content size category is associated with accessibility.

Font size change notifications

static let didChangeNotification: NSNotification.Name

A notification that posts when the user changes the preferred content size setting.

static let newValueUserInfoKey: String

A key that reflects the new preferred content size.

Font size category creation

init(rawValue: String)

Creates a new instance with the specified raw value.

init(ContentSizeCategory?)

Creates a content size category from the specified SwiftUI content size category.

init(DynamicTypeSize?)

Creates a content size category from the specified SwiftUI Dynamic Type size.

Structures

struct DidChangeMessage Beta

Relationships

Conforms To

  • Comparable
  • Copyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Managing the preferred content size

var preferredContentSizeCategory: UIContentSizeCategory

The font sizing option preferred by the user.

protocol UIContentSizeCategoryAdjusting

A collection of methods that give controls an easy way to adopt automatic adjustment to content category changes.


https://developer.apple.com/documentation/uikit/uicontentsizecategoryadjusting

  • UIKit
  • UIContentSizeCategoryAdjusting

Protocol

UIContentSizeCategoryAdjusting

A collection of methods that give controls an easy way to adopt automatic adjustment to content category changes.

@MainActor protocol UIContentSizeCategoryAdjusting : NSObjectProtocol

Topics

Adjusting the size of fonts

var adjustsFontForContentSizeCategory: Bool

A Boolean that indicates whether the object automatically updates its font when the devices content size category changes.

Required

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UILabel
  • UISearchTextField
  • UITextField
  • UITextView

See Also

Managing the preferred content size

var preferredContentSizeCategory: UIContentSizeCategory

The font sizing option preferred by the user.

struct UIContentSizeCategory

Constants that indicate the preferred size of your content.

static let didChangeNotification: NSNotification.Name

A notification that posts when the user changes the preferred content size setting.

static let newValueUserInfoKey: String

A key that reflects the new preferred content size.


https://developer.apple.com/documentation/uikit/uicontentsizecategory/didchangenotification

  • UIKit
  • UIContentSizeCategory
  • didChangeNotification

Type Property

didChangeNotification

A notification that posts when the user changes the preferred content size setting.

tvOS

nonisolated static let didChangeNotification: NSNotification.Name

Mentioned in

Scaling Fonts Automatically

Discussion

This notification is sent when the value in the preferredContentSizeCategory property changes. The userInfo dictionary of the notification contains the newValueUserInfoKey key, which reflects the new setting.

See Also

Managing the preferred content size

var preferredContentSizeCategory: UIContentSizeCategory

The font sizing option preferred by the user.

struct UIContentSizeCategory

Constants that indicate the preferred size of your content.

protocol UIContentSizeCategoryAdjusting

A collection of methods that give controls an easy way to adopt automatic adjustment to content category changes.

static let newValueUserInfoKey: String

A key that reflects the new preferred content size.


https://developer.apple.com/documentation/uikit/uicontentsizecategory/newvalueuserinfokey

  • UIKit
  • UIContentSizeCategory
  • newValueUserInfoKey

Type Property

newValueUserInfoKey

A key that reflects the new preferred content size.

tvOS

nonisolated static let newValueUserInfoKey: String

Discussion

This keys value is an NSString object that reflects the new value of the preferredContentSizeCategory property.

See Also

Managing the preferred content size

var preferredContentSizeCategory: UIContentSizeCategory

The font sizing option preferred by the user.

struct UIContentSizeCategory

Constants that indicate the preferred size of your content.

protocol UIContentSizeCategoryAdjusting

A collection of methods that give controls an easy way to adopt automatic adjustment to content category changes.

static let didChangeNotification: NSNotification.Name

A notification that posts when the user changes the preferred content size setting.


https://developer.apple.com/documentation/uikit/uiapplication/supportedinterfaceorientations(for:)

#app-main)

  • UIKit
  • UIApplication
  • supportedInterfaceOrientations(for:)

Instance Method

supportedInterfaceOrientations(for:)

Returns the default set of interface orientations to use for the view controllers in the specified window.

@MainActor

Parameters

window

The window whose default interface orientations you want to retrieve.

Return Value

A bit mask specifying which orientations are supported. See UIInterfaceOrientationMask for valid bit-mask values. The value returned by this method must not be 0.

Discussion

Starting in iOS 8, you should employ the UITraitCollection and UITraitEnvironment APIs, and size class properties as used in those APIs, instead of using this method or otherwise writing your app in terms of interface orientation.

This method returns the default interface orientations for the app. These orientations are used only for view controllers that do not specify their own. If your app delegate implements the application(_:supportedInterfaceOrientationsFor:) method, the system does not call this method.

The default implementation of this method returns the apps default set of supported interface orientations, as you define them in the UISupportedInterfaceOrientations key of the Info.plist file in your Xcode project. If the file does not contain that key, this method returns all interface orientations for the iPad idiom and returns all interface orientations except the portrait upside-down orientation for the iPhone idiom.


https://developer.apple.com/documentation/uikit/uiapplication/userdidtakescreenshotnotification


https://developer.apple.com/documentation/uikit/uiapplication/isdefault(_:)

#app-main)

  • UIKit
  • UIApplication
  • isDefault(_:)

Instance Method

isDefault(_:)

Reports whether this app is the persons default app in the given category.

nonisolated

Parameters

category

The type of app for which you test whether your app is the default.

Return Value

If the system determines the status of the app, this method returns true if the app is the default app in the category, and false otherwise. If the system doesnt determine the status, or the app exceeds the threshold rate for calling this method, it throws an error.

Discussion

To reduce the likelihood that users face continuous requests to set a browser as their default, this API only tells the browser app if its the default up to four times in a year. If you call the method too frequently, it throws an error with the domain UIApplicationCategoryDefaultErrorDomain and the code rateLimited. The errors user information dictionary contains these keys:

statusLastProvidedDateErrorKey

The date at which the app most recently received a true or false response from this method.

retryAvailableDateErrorKey

The date at which the app can next request an updated response.

See Also

Discovering if your app is the default app in a category

enum Category

Constants that describe the types of apps in the system.

struct CategoryDefaultError

Errors that can happen when the system checks if your app is the default app in a category.


https://developer.apple.com/documentation/uikit/uiapplication/category

  • UIKit
  • UIApplication
  • UIApplication.Category

Enumeration

UIApplication.Category

Constants that describe the types of apps in the system.

enum Category

Overview

Use the values in this enumeration with isDefault(_:) (or, in Objective-C, defaultStatusForCategory:error:) to find if your app is the persons default for a category.

Topics

Application categories

case webBrowser

The app is a web browser.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Discovering if your app is the default app in a category

Reports whether this app is the persons default app in the given category.

struct CategoryDefaultError

Errors that can happen when the system checks if your app is the default app in a category.


https://developer.apple.com/documentation/uikit/uiapplication/categorydefaulterror

  • UIKit
  • UIApplication
  • UIApplication.CategoryDefaultError

Structure

UIApplication.CategoryDefaultError

Errors that can happen when the system checks if your app is the default app in a category.

struct CategoryDefaultError

Topics

Getting information about the error

enum Code

An enumeration of reasons an error happens when the system discovers whether your app is the default in a category.

static let retryAvailableDateErrorKey: String

A dictionary key, with a value thats a date when a result is next available.

static let statusLastProvidedDateErrorKey: String

A dictionary key, with a value thats the date your app last received a successful result.

Errors when discovering if an app is the default in a category

static var errorDomain: String

A string that indicates that an error happened when the system attempted to determine if your app is the default in a category.

static var rateLimited: UIApplication.CategoryDefaultError.Code

An error code that indicates your app requested its status too frequently.

Relationships

Conforms To

  • CustomNSError
  • Equatable
  • Error
  • Hashable
  • Sendable
  • SendableMetatype

See Also

Discovering if your app is the default app in a category

Reports whether this app is the persons default app in the given category.

enum Category

Constants that describe the types of apps in the system.


https://developer.apple.com/documentation/uikit/uiapplication-deprecated-symbols

Collection

  • UIKit
  • App and environment
  • UIApplication
  • Deprecated symbols

API Collection

Deprecated symbols

Review unsupported symbols and their replacements.

Topics

Deprecated methods

Asks the system to activate an existing scene, or create a new scene and associate it with your app.

Deprecated

func beginIgnoringInteractionEvents()

Tells the receiver to suspend the handling of touch-related events.

func endIgnoringInteractionEvents()

Tells the receiver to resume the handling of touch-related events.

func setMinimumBackgroundFetchInterval(TimeInterval)

Specifies the minimum amount of time that must elapse between background fetch operations.

func scheduleLocalNotification(UILocalNotification)

Schedules a local notification for delivery at its encapsulated date and time.

func presentLocalNotificationNow(UILocalNotification)

Presents a local notification immediately.

func cancelLocalNotification(UILocalNotification)

Cancels the delivery of the specified scheduled local notification.

func cancelAllLocalNotifications()

Cancels the delivery of all scheduled local notifications.

Configures a periodic handler for VoIP apps in older versions of iOS.

let UIMinimumKeepAliveTimeout: TimeInterval

The minimum amount of time (measured in seconds) an app may run a critical background task in the background.

func clearKeepAliveTimeout()

Removes a previously installed periodic handler block.

func setStatusBarHidden(Bool, with: UIStatusBarAnimation)

Hides or shows the status bar, optionally animating the transition.

func setStatusBarStyle(UIStatusBarStyle, animated: Bool)

Sets the style of the status bar, optionally animating the transition to the new style.

func setStatusBarOrientation(UIInterfaceOrientation, animated: Bool)

Sets the apps status bar to the specified orientation, optionally animating the transition.

func registerUserNotificationSettings(UIUserNotificationSettings)

Registers your preferred options for notifying the user.

func registerForRemoteNotifications(matching: UIRemoteNotificationType)

Register to receive remote notifications of the specified types via Apple Push Notification service.

Returns the types of notifications the app accepts.

struct UIRemoteNotificationType

Constants indicating the types of notifications the app may display to the user.

Attempts to open the resource at the specified URL.

func setNewsstandIconImage(UIImage?)

Sets the icon of a Newsstand app to an image depicting the current issue of a publication.

Deprecated notifications

class let willChangeStatusBarFrameNotification: NSNotification.Name

Posted when the app is about to change the frame of the status bar.

class let didChangeStatusBarFrameNotification: NSNotification.Name

Posted when the frame of the status bar changes.

class let willChangeStatusBarOrientationNotification: NSNotification.Name

Posted when the app is about to change the orientation of its interface.

class let didChangeStatusBarOrientationNotification: NSNotification.Name

Posted when the orientation of the apps user interface changes.

Deprecated properties

var applicationIconBadgeNumber: Int

The number currently set as the badge of the app icon on the Home screen.

class let statusBarFrameUserInfoKey: String

A key whose value indicates the new status bar frame.

class let statusBarOrientationUserInfoKey: String

A key whose value indicates the current interface orientation.

var currentUserNotificationSettings: UIUserNotificationSettings?

Returns the user notification settings for the app.

var isIgnoringInteractionEvents: Bool

A Boolean value that indicates whether the receiver is ignoring events initiated by touches on the screen.

var isNetworkActivityIndicatorVisible: Bool

A Boolean value that turns an indicator of network activity on or off.

var isStatusBarHidden: Bool

A Boolean value that determines whether the status bar is hidden.

var keyWindow: UIWindow?

The apps key window.

var scheduledLocalNotifications: [UILocalNotification]?

All currently scheduled local notifications.

var statusBarFrame: CGRect

The frame rectangle defining the area of the status bar.

var statusBarOrientation: UIInterfaceOrientation

The current orientation of the apps status bar.

var statusBarOrientationAnimationDuration: TimeInterval

The animation duration in seconds for the status bar during a 90 degree orientation change.

var statusBarStyle: UIStatusBarStyle

The current style of the status bar.

var windows: [UIWindow]

The apps visible and hidden windows.


https://developer.apple.com/documentation/uikit/uiapplication/backgroundrefreshstatusdidchangemessage

  • UIKit
  • UIApplication
  • UIApplication.BackgroundRefreshStatusDidChangeMessage Beta

Structure

UIApplication.BackgroundRefreshStatusDidChangeMessage

struct BackgroundRefreshStatusDidChangeMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/didbecomeactivemessage

  • UIKit
  • UIApplication
  • UIApplication.DidBecomeActiveMessage Beta

Structure

UIApplication.DidBecomeActiveMessage

struct DidBecomeActiveMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/didenterbackgroundmessage

  • UIKit
  • UIApplication
  • UIApplication.DidEnterBackgroundMessage Beta

Structure

UIApplication.DidEnterBackgroundMessage

struct DidEnterBackgroundMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/didfinishlaunchingmessage

  • UIKit
  • UIApplication
  • UIApplication.DidFinishLaunchingMessage Beta

Structure

UIApplication.DidFinishLaunchingMessage

struct DidFinishLaunchingMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/didreceivememorywarningmessage

  • UIKit
  • UIApplication
  • UIApplication.DidReceiveMemoryWarningMessage Beta

Structure

UIApplication.DidReceiveMemoryWarningMessage

struct DidReceiveMemoryWarningMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatadidbecomeavailablemessage

  • UIKit
  • UIApplication
  • UIApplication.ProtectedDataDidBecomeAvailableMessage Beta

Structure

UIApplication.ProtectedDataDidBecomeAvailableMessage

struct ProtectedDataDidBecomeAvailableMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatawillbecomeunavailablemessage

  • UIKit
  • UIApplication
  • UIApplication.ProtectedDataWillBecomeUnavailableMessage Beta

Structure

UIApplication.ProtectedDataWillBecomeUnavailableMessage

struct ProtectedDataWillBecomeUnavailableMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/significanttimechangemessage


https://developer.apple.com/documentation/uikit/uiapplication/userdidtakescreenshotmessage

  • UIKit
  • UIApplication
  • UIApplication.UserDidTakeScreenshotMessage Beta

Structure

UIApplication.UserDidTakeScreenshotMessage

struct UserDidTakeScreenshotMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/willenterforegroundmessage

  • UIKit
  • UIApplication
  • UIApplication.WillEnterForegroundMessage Beta

Structure

UIApplication.WillEnterForegroundMessage

struct WillEnterForegroundMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/willresignactivemessage

  • UIKit
  • UIApplication
  • UIApplication.WillResignActiveMessage Beta

Structure

UIApplication.WillResignActiveMessage

struct WillResignActiveMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiapplication/willterminatemessage

  • UIKit
  • UIApplication
  • UIApplication.WillTerminateMessage Beta

Structure

UIApplication.WillTerminateMessage

struct WillTerminateMessage

Topics

Initializers

init()

Relationships

Conforms To

  • NotificationCenter.MainActorMessage
  • NotificationCenter.Message

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiresponder

  • UIKit
  • UIResponder

Class

UIResponder

An abstract interface for responding to and handling events.

tvOS

@MainActor class UIResponder

Mentioned in

Using responders and the responder chain to handle events

Handling key presses made on a physical keyboard

Overview

Responder objects — instances of UIResponder — constitute the event-handling backbone of a UIKit app. Many key objects are also responders, including the UIApplication object, UIViewController objects, and all UIView objects (which includes UIWindow). As events occur, UIKit dispatches them to your apps responder objects for handling.

There are several kinds of events, including touch events, motion events, remote-control events, and press events. To handle a specific type of event, a responder must override the corresponding methods. For example, to handle touch events, a responder implements the touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), and touchesCancelled(_:with:) methods. In the case of touches, the responder uses the event information provided by UIKit to track changes to those touches and to update the apps interface appropriately.

In addition to handling events, UIKit responders also manage the forwarding of unhandled events to other parts of your app. If a given responder doesnt handle an event, it forwards that event to the next event in the responder chain. UIKit manages the responder chain dynamically, using predefined rules to determine which object should be next to receive an event. For example, a view forwards events to its superview, and the root view of a hierarchy forwards events to its view controller.

Responders process UIEvent objects but can also accept custom input through an input view. The systems keyboard is the most obvious example of an input view. When the user taps a UITextField and UITextView object onscreen, the view becomes the first responder and displays its input view, which is the system keyboard. Similarly, you can create custom input views and display them when other responders become active. To associate a custom input view with a responder, assign that view to the inputView property of the responder.

For information about responders and the responder chain, see Using responders and the responder chain to handle events.

Topics

Managing the responder chain

var next: UIResponder?

Returns the next responder in the responder chain, or nil if theres no next responder.

var isFirstResponder: Bool

Returns a Boolean value indicating whether this object is the first responder.

var canBecomeFirstResponder: Bool

Returns a Boolean value indicating whether this object can become the first responder.

Asks UIKit to make this object the first responder in its window.

var canResignFirstResponder: Bool

Returns a Boolean value indicating whether the responder is willing to relinquish first-responder status.

Notifies this object that it has been asked to relinquish its status as first responder in its window.

Responding to touch events

Tells this object that one or more new touches occurred in a view or window.

Tells the responder when one or more touches associated with an event changed.

Tells the responder when one or more fingers are raised from a view or window.

Tells the responder when a system event (such as a system alert) cancels a touch sequence.

Tells the responder that updated values were received for previously estimated properties or that an update is no longer expected.

Responding to motion events

func motionBegan(UIEvent.EventSubtype, with: UIEvent?)

Tells the responder that a motion event has begun.

func motionEnded(UIEvent.EventSubtype, with: UIEvent?)

Tells the responder that a motion event has ended.

func motionCancelled(UIEvent.EventSubtype, with: UIEvent?)

Tells the responder that a motion event has been canceled.

Responding to press events

Generally, responders that handle press events should override all four of these methods.

Tells this object when a physical button is first pressed.

Tells this object when a value associated with a press has changed.

Tells the object when a button is released.

Tells this object when a system event (such as a low-memory warning) cancels a press event.

Responding to remote-control events

func remoteControlReceived(with: UIEvent?)

Tells the object when a remote-control event is received.

Managing input views

var inputView: UIView?

The custom input view to display when the responder becomes the first responder.

var inputViewController: UIInputViewController?

The custom input view controller to use when the responder becomes the first responder.

var inputAccessoryView: UIView?

The custom input accessory view to display when the responder becomes the first responder.

var inputAccessoryViewController: UIInputViewController?

The custom input accessory view controller to display when the responder becomes the first responder.

func reloadInputViews()

Updates the custom input and accessory views when the object is the first responder.

Getting the undo manager

var undoManager: UndoManager?

Returns the nearest shared undo manager in the responder chain.

Building and validating commands

func buildMenu(with: any UIMenuBuilder)

Asks the receiving responder to add and remove items from a menu system.

func validate(UICommand)

Asks the receiving responder to validate the command.

Requests the receiving responder to enable or disable the specified command in the user interface.

Returns the target object that responds to an action.

Accessing the available key commands

var keyCommands: [UIKeyCommand]?

The key commands that trigger actions on this responder.

Managing the text input mode

var textInputMode: UITextInputMode?

The text input mode for this responder object.

var textInputContextIdentifier: String?

An identifier signifying that the responder should preserve its text input mode information.

class func clearTextInputContextIdentifier(String)

Clears text input mode information from the apps user defaults.

var inputAssistantItem: UITextInputAssistantItem

The input assistant to use when configuring the keyboards shortcuts bar.

Supporting user activities

var userActivity: NSUserActivity?

An object encapsulating a user activity supported by this responder.

func restoreUserActivityState(NSUserActivity)

Restores the state needed to continue the given user activity.

func updateUserActivityState(NSUserActivity)

Updates the state of the given user activity.

Managing activity items

var activityItemsConfiguration: (any UIActivityItemsConfigurationReading)?

Accessing the editing interaction

var editingInteractionConfiguration: UIEditingInteractionConfiguration

enum UIEditingInteractionConfiguration

Capturing text from the camera

func captureTextFromCamera(Any?)

Starts scanning text using the devices camera.

Managing the Touch Bar

Asks the receiving responder to create and configure a Touch Bar object.

var touchBar: NSTouchBar?

The Touch Bar object for the responder.

Constants

class let keyboardAnimationCurveUserInfoKey: String

A user info key to retrieve the animation curve that the system uses to animate the keyboard onto or off the screen.

class let keyboardAnimationDurationUserInfoKey: String

A user info key to retrieve the duration of the keyboard animation in seconds.

class let keyboardDidChangeFrameNotification: NSNotification.Name

A notification that posts immediately after a change in the keyboards frame.

class let keyboardDidHideNotification: NSNotification.Name

A notification that posts immediately after dismissing the keyboard.

class let keyboardDidShowNotification: NSNotification.Name

A notification that posts immediately after displaying the keyboard.

class let keyboardFrameBeginUserInfoKey: String

A user info key to retrieve the keyboards frame at the beginning of its animation.

class let keyboardFrameEndUserInfoKey: String

A user info key to retrieve the keyboards frame at the end of its animation.

class let keyboardIsLocalUserInfoKey: String

A user info key to retrieve a Boolean value that indicates whether the keyboard belongs to the current app.

class let keyboardWillChangeFrameNotification: NSNotification.Name

A notification that posts immediately prior to a change in the keyboards frame.

class let keyboardWillHideNotification: NSNotification.Name

A notification that posts immediately prior to dismissing the keyboard.

class let keyboardWillShowNotification: NSNotification.Name

A notification that posts immediately prior to displaying the keyboard.

Structures

struct KeyboardDidChangeFrameMessage Beta

struct KeyboardDidHideMessage Beta

struct KeyboardDidShowMessage Beta

struct KeyboardWillChangeFrameMessage Beta

struct KeyboardWillHideMessage Beta

struct KeyboardWillShowMessage Beta

Instance Properties

var pencilKitResponderState: PKResponderState

The PencilKit state associated with the responder object.

Beta

Instance Methods

Asks the responder for an element provider to fulfill the given focus-based deferred element. Check the identifier of the deferred element to identify which deferred element this is. By default, this returns nil. Return a non-nil provider to make this responder responsible for providing elements for this fulfillment of the deferred element.

Relationships

Inherits From

  • NSObject

Inherited By

  • UIAccessibilityElement
  • UIApplication
  • UIScene
  • UIView
  • UIViewController

Conforms To

  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • UIActivityItemsConfigurationProviding
  • UIPasteConfigurationSupporting
  • UIResponderStandardEditActions
  • UIUserActivityRestoring

See Also

Essentials

Learn how to handle events that propagate through your app.

class UIEvent

An object that describes a single user interaction with your app.


https://developer.apple.com/documentation/uikit/uiactivityitemsconfigurationproviding

  • UIKit
  • UIActivityItemsConfigurationProviding

Protocol

UIActivityItemsConfigurationProviding

An interface that provides a source for shareable content to fulfill user requests to share current content.

protocol UIActivityItemsConfigurationProviding : NSObjectProtocol

Overview

The user can share content from your app in a number of ways:

  • Ask Siri to “share this” on an iOS device.

  • Click an NSSharingServicePickerToolbarItem in the toolbar of an app built with Mac Catalyst.

  • Start a UIContextMenuInteraction by using Force Touch or a long press gesture.

When one of these interactions happens, the system asks your view controller for content to share. Supply multiple representations of the current content, such as a file, image, and URL.

Topics

Providing shareable content

var activityItemsConfiguration: (any UIActivityItemsConfigurationReading)?

An object or value that specifies items to share.

Required

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIAccessibilityElement
  • UIActionSheet
  • UIActivityIndicatorView
  • UIActivityViewController
  • UIAlertController
  • UIAlertView
  • UIApplication
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICloudSharingController
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewController
  • UICollectionViewListCell
  • UIColorPickerViewController
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIEventAttributionView
  • UIFontPickerViewController
  • UIImagePickerController
  • UIImageView
  • UIInputView
  • UIInputViewController
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UINavigationController
  • UIPageControl
  • UIPageViewController
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIReferenceLibraryViewController
  • UIRefreshControl
  • UIResponder
  • UIScene
  • UIScrollView
  • UISearchBar
  • UISearchContainerViewController
  • UISearchController
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UISplitViewController
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarController
  • UITableView
  • UITableViewCell
  • UITableViewController
  • UITableViewHeaderFooterView
  • UITextField
  • UITextFormattingViewController
  • UITextView
  • UIToolbar
  • UIVideoEditorController
  • UIView
  • UIViewController
  • UIVisualEffectView
  • UIWebView
  • UIWindow
  • UIWindowScene

See Also

Activities interface

Collaborating and sharing copies of your data

Share data and collaborate with people from your app.

class UIActivityViewController

A view controller that you use to offer standard services from your app.

class UIActivityItemProvider

A proxy for data that passes to an activity view controller.

protocol UIActivityItemSource

A set of methods that an activity view controller uses to retrieve the data items to act on.

class UIActivity

An abstract class that you subclass to implement app-specific services.


https://developer.apple.com/documentation/uikit/uiresponderstandardeditactions


https://developer.apple.com/documentation/uikit/using-responders-and-the-responder-chain-to-handle-events)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/about-the-app-launch-sequence)


https://developer.apple.com/documentation/uikit/about-the-ui-preservation-process)


https://developer.apple.com/documentation/uikit/uiapplication)).


https://developer.apple.com/documentation/uikit/uiapplication/shared).


https://developer.apple.com/documentation/uikit/uiwindow)


https://developer.apple.com/documentation/uikit/uiapplication/open(_:options:completionhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/beginignoringinteractionevents()))

))#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/registerforremotenotifications()))

))#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/applicationsupportsshaketoedit))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/canopenurl(_:)))


https://developer.apple.com/documentation/uikit/uiapplication/beginbackgroundtask(expirationhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/beginbackgroundtask(withname:expirationhandler:)))

))#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/schedulelocalnotification(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/cancellocalnotification(_:)))

))#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/beginreceivingremotecontrolevents())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/endreceivingremotecontrolevents()))

))#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication).


https://developer.apple.com/documentation/uikit/uiapplication/sendevent(_:))


https://developer.apple.com/documentation/uikit/uiapplication/sendaction(_:to:from:for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/shared)


https://developer.apple.com/documentation/uikit/uiapplication/delegate)


https://developer.apple.com/documentation/uikit/uiapplication/registerforremotenotifications())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/unregisterforremotenotifications())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/isregisteredforremotenotifications)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/applicationstate)


https://developer.apple.com/documentation/uikit/uiapplication/state)


https://developer.apple.com/documentation/uikit/uiapplication/supportsmultiplescenes)


https://developer.apple.com/documentation/uikit/uiapplication/connectedscenes)


https://developer.apple.com/documentation/uikit/uiapplication/opensessions)


https://developer.apple.com/documentation/uikit/uiapplication/activatescenesession(for:errorhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/requestscenesessiondestruction(_:options:errorhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/requestscenesessionrefresh(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiscenesessionactivationrequest-swift.struct)


https://developer.apple.com/documentation/uikit/uiscene/activationrequestoptions)


https://developer.apple.com/documentation/uikit/uiscenedestructionrequestoptions)


https://developer.apple.com/documentation/uikit/uiapplication/backgroundrefreshstatus)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uibackgroundrefreshstatus)


https://developer.apple.com/documentation/uikit/uiapplication/backgroundrefreshstatusdidchangenotification)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/beginbackgroundtask(withname:expirationhandler:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/endbackgroundtask(_:))


https://developer.apple.com/documentation/uikit/uibackgroundtaskidentifier)


https://developer.apple.com/documentation/uikit/uiapplication/backgroundtimeremaining)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/backgroundfetchintervalminimum)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/backgroundfetchintervalnever)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/canopenurl(_:))


https://developer.apple.com/documentation/uikit/uiapplication/openexternalurloptionskey)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/opensettingsurlstring)


https://developer.apple.com/documentation/uikit/uiapplication/opennotificationsettingsurlstring)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplicationopennotificationsettingsurlstring)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/opendefaultapplicationssettingsurlstring)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/isidletimerdisabled)


https://developer.apple.com/documentation/uikit/uiapplication/extendstaterestoration())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/completestaterestoration())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/ignoresnapshotonnextapplicationlaunch())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/registerobject(forstaterestoration:restorationidentifier:))


https://developer.apple.com/documentation/uikit/uiapplication/shortcutitems)


https://developer.apple.com/documentation/uikit/uiapplication/isprotecteddataavailable)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatadidbecomeavailablenotification)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatawillbecomeunavailablenotification)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/endreceivingremotecontrolevents())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/userinterfacelayoutdirection)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiuserinterfacelayoutdirection)


https://developer.apple.com/documentation/uikit/uiapplication/applicationsupportsshaketoedit)


https://developer.apple.com/documentation/uikit/uiapplication/supportsalternateicons)


https://developer.apple.com/documentation/uikit/uiapplication/alternateiconname)


https://developer.apple.com/documentation/uikit/uiapplication/setalternateiconname(_:completionhandler:))


https://developer.apple.com/documentation/uikit/uiapplication/preferredcontentsizecategory)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uicontentsizecategory)


https://developer.apple.com/documentation/uikit/uicontentsizecategoryadjusting)


https://developer.apple.com/documentation/uikit/uicontentsizecategory/didchangenotification)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uicontentsizecategory/newvalueuserinfokey)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/supportedinterfaceorientations(for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/userdidtakescreenshotnotification)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/isdefault(_:))


https://developer.apple.com/documentation/uikit/uiapplication/category)


https://developer.apple.com/documentation/uikit/uiapplication/categorydefaulterror)


https://developer.apple.com/documentation/uikit/uiapplication-deprecated-symbols)


https://developer.apple.com/documentation/uikit/uiapplication/backgroundrefreshstatusdidchangemessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/didbecomeactivemessage)


https://developer.apple.com/documentation/uikit/uiapplication/didenterbackgroundmessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/didfinishlaunchingmessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/didreceivememorywarningmessage)


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatadidbecomeavailablemessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/protecteddatawillbecomeunavailablemessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/significanttimechangemessage)


https://developer.apple.com/documentation/uikit/uiapplication/userdidtakescreenshotmessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/willenterforegroundmessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/willresignactivemessage)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiapplication/willterminatemessage)


https://developer.apple.com/documentation/uikit/uiresponder)


https://developer.apple.com/documentation/uikit/uiactivityitemsconfigurationproviding)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiresponderstandardeditactions)


https://developer.apple.com/documentation/uikit/customizing-drawings


https://developer.apple.com/documentation/uikit/implementing-a-multi-touch-app

  • UIKit
  • Touches, presses, and gestures
  • Handling touches in your view
  • Implementing a Multi-Touch app

Article

Implementing a Multi-Touch app

Learn how to create a simple app that handles multitouch input.

Overview

Consider the app shown in the following image, where a single main view that draws a gray circle at each touch location. When a touch ends, the circle disappears. When the users fingers move, the underlying circles move with them.

The creation of this app begins with the Single View app template in Xcode. This type of app has a single view controller whose view — in this case, a custom subclass of UIView called TouchableView — fills the screen. The view contains only a label initially, but the app programmatically adds subviews later. The following image shows the storyboard for the view controller.

Implement the TouchableView class

The TouchableView class overrides the inherited touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), and touchesCancelled(_:with:) methods. These methods handle the creation and management of subviews that draw the gray circles at each touch location. Specifically, these methods do the following:

  • The touchesBegan(_:with:) method creates a new subview at the location of each touch event.

  • The touchesMoved(_:with:) method updates the position of the subview associated with each touch.

  • The touchesEnded(_:with:) and touchesCancelled(_:with:) methods remove the subview associated with each touch that ended.

The following code shows the main implementation of the TouchableView class and its touch handling methods. Each method iterates through the touches and performs the needed actions. The touchViews dictionary uses the UITouch objects as keys to retrieve the subviews the user is manipulating onscreen.

class TouchableView: UIView { var touchViews = UITouch:TouchSpotView

override init(frame: CGRect) { super.init(frame: frame) isMultipleTouchEnabled = true }

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

for touch in touches { createViewForTouch(touch: touch) } }

for touch in touches { let view = viewForTouch(touch: touch) // Move the view to the new location. let newLocation = touch.location(in: self) view?.center = newLocation } }

for touch in touches { removeViewForTouch(touch: touch) } }

// Other methods. . . }

Several helper methods handle creation, management, and disposal of the subviews, as shown in the following code. The createViewForTouch method creates a new TouchSpotView object and adds it to the TouchableView object, animating the view to its full size. The removeViewForTouch method removes the corresponding subview and updates the class data structures. The viewForTouch method is a convenience method for retrieving the view associated with a given touch event.

func createViewForTouch( touch : UITouch ) { let newView = TouchSpotView() newView.bounds = CGRect(x: 0, y: 0, width: 1, height: 1) newView.center = touch.location(in: self)

// Add the view and animate it to a new size. addSubview(newView) UIView.animate(withDuration: 0.2) { newView.bounds.size = CGSize(width: 100, height: 100) }

// Save the views internally touchViews[touch] = newView }

return touchViews[touch] }

func removeViewForTouch (touch : UITouch ) { if let view = touchViews[touch] { view.removeFromSuperview() touchViews.removeValue(forKey: touch) } }

Implement the TouchSpotView class

The TouchSpotView class (shown in the following code) represents the custom subviews that draw the gray circles onscreen. TouchSpotView maintains its circular shape by setting the cornerRadius property of the layer each time its bounds property changes.

class TouchSpotView : UIView { override init(frame: CGRect) { super.init(frame: frame) backgroundColor = UIColor.lightGray }

// Update the corner radius when the bounds change. override var bounds: CGRect { get { return super.bounds } set(newBounds) { super.bounds = newBounds layer.cornerRadius = newBounds.size.width / 2.0 } } }

See Also

Advanced touch handling

Learn how to support high-precision touches in your app.

Create a smooth and responsive drawing experience using UIKits predictions for touch locations.


https://developer.apple.com/documentation/uikit/making-a-view-into-a-drag-source

  • UIKit
  • Drag and drop
  • Making a view into a drag source

Article

Making a view into a drag source

Adopt drag interaction APIs to provide items for dragging.

Overview

By implementing a drag interaction delegate ( UIDragInteractionDelegate) for a view, you enable that view to function as a drag source in your app.

Enable a view as a drag source

Any instance or subclass of UIView can act as a drag source. Your first steps to make this happen are:

  1. Create a drag interaction (a UIDragInteraction instance).

  2. Specify the drag interactions delegate (an object that conforms to the UIDragInteractionDelegate protocol).

  3. Add the interaction to the views interactions property.

Heres how to do this using a custom helper method, which youd typically call within a view controllers viewDidLoad() method:

func customEnableDragging(on view: UIView, dragInteractionDelegate: UIDragInteractionDelegate) { let dragInteraction = UIDragInteraction(delegate: dragInteractionDelegate) view.addInteraction(dragInteraction) }

Create a drag item

A drag item encapsulates a source apps promises for providing a variety of data representations for one model object.

To create a drag item, implement the dragInteraction(_:itemsForBeginning:) method in your drag interaction delegate, as shown here in a minimal form:

// Cast to NSString is required for NSItemProviderWriting support. let stringItemProvider = NSItemProvider(object: "Hello World" as NSString) return [
UIDragItem(itemProvider: stringItemProvider)
] }

This implementation uses the init(object:) convenience initializer. When you instantiate a drag item, pass an object in your apps native representation, or in the highest-fidelity representation you support. In general, ensure that the first element in the item providers registeredTypeIdentifiers array represents the highest-fidelity data your drag interaction delegate can deliver.

To add more data representations to a drag item, as you typically would in your app, add them in fidelity order, from highest to lowest. When adding representations, you have choices:

  • The best option for adding multiple data representations to a drag item, in many cases, is to adopt the NSItemProviderWriting protocol in your model class. Using this protocol, you place the code for providing multiple data representations within the model class.

  • You can use the registerObject(_:visibility:) method, or related methods, from the NSItemProvider class, to explicitly register data representations.

Understand a drag source in context

In the dragInteraction(_:itemsForBeginning:) protocol method, your source app responds to a request from the system. This request is itself triggered by the user starting to drag an item in your apps UI. The conversation between your app and the system proceeds as shown here:

The figure above depicts the steps for constructing a drag item, in context:

  1. The user initiates a drag activity with a long press on a view in your app, followed by moving their finger while still touching the screen. The system instantiates a drag session (an object that conforms to the UIDragSession protocol, not shown in the figure) for managing the drag activity.

  2. The system calls the drag interaction delegates dragInteraction(_:itemsForBeginning:) protocol method. Your delegate returns one or more drag items.

  3. Finally, the system populates the drag session with your drag items, ready for the user to move the drag session to a destination.

See Also

Essentials

Understanding a drag item as a promise

Use drag items to convey data representation promises between a source app and a destination app.

Making a view into a drop destination

Adopt drop interaction APIs to selectively consume dragged content.

Adopting drag and drop in a custom view

Demonstrates how to enable drag and drop for a UIImageView instance.

Adopting drag and drop in a table view

Demonstrates how to enable and implement drag and drop for a table view.


https://developer.apple.com/documentation/uikit/uiview/clipstobounds

  • UIKit
  • UIView
  • clipsToBounds

Instance Property

clipsToBounds

A Boolean value that determines whether subviews are confined to the bounds of the view.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var clipsToBounds: Bool { get set }

Mentioned in

Using responders and the responder chain to handle events

Discussion

Setting this value to true causes subviews to be clipped to the bounds of the view. If set to false, subviews whose frames extend beyond the visible bounds of the view arent clipped.

The default value is false. Some subclasses of UIView, like UIScrollView, override the default value to true.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/frame

  • UIKit
  • UIView
  • frame

Instance Property

frame

The frame rectangle, which describes the views location and size in its superviews coordinate system.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var frame: CGRect { get set }

Discussion

This rectangle defines the size and position of the view in its superviews coordinate system. Use this rectangle during layout operations to set the size and position the view. Setting this property changes the point specified by the center property and changes the size in the bounds rectangle accordingly. The coordinates of the frame rectangle are always specified in points.

Changing the frame rectangle automatically redisplays the view without calling its draw(_:) method. If you want UIKit to call the draw(_:) method when the frame rectangle changes, set the contentMode property to UIView.ContentMode.redraw.

Changes to this property can be animated. However, if the transform property contains a non-identity transform, the value of the frame property is undefined and should not be modified. In that case, reposition the view using the center property and adjust the size using the bounds property instead.

See Also

Configuring the bounds and frame rectangles

var bounds: CGRect

The bounds rectangle, which describes the views location and size in its own coordinate system.

var center: CGPoint

The center point of the views frame rectangle.

var transform: CGAffineTransform

Specifies the transform applied to the view, relative to the center of its bounds.

var transform3D: CATransform3D

The three-dimensional transform to apply to the view.

var anchorPoint: CGPoint

The anchor point of the views bounds rectangle.


https://developer.apple.com/documentation/uikit/uiview/bounds

  • UIKit
  • UIView
  • bounds

Instance Property

bounds

The bounds rectangle, which describes the views location and size in its own coordinate system.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var bounds: CGRect { get set }

Mentioned in

Implementing a Multi-Touch app

Discussion

The default bounds origin is (0,0) and the size is the same as the size of the rectangle in the frame property. Changing the size portion of this rectangle grows or shrinks the view relative to its center point. Changing the size also changes the size of the rectangle in the frame property to match. The coordinates of the bounds rectangle are always specified in points.

Changing the bounds rectangle automatically redisplays the view without calling its draw(_:) method. If you want UIKit to call the draw(_:) method, set the contentMode property to UIView.ContentMode.redraw.

Changes to this property can be animated.

See Also

Configuring the bounds and frame rectangles

var frame: CGRect

The frame rectangle, which describes the views location and size in its superviews coordinate system.

var center: CGPoint

The center point of the views frame rectangle.

var transform: CGAffineTransform

Specifies the transform applied to the view, relative to the center of its bounds.

var transform3D: CATransform3D

The three-dimensional transform to apply to the view.

var anchorPoint: CGPoint

The anchor point of the views bounds rectangle.


https://developer.apple.com/documentation/uikit/uiview/addsubview(_:)

#app-main)

  • UIKit
  • UIView
  • addSubview(_:)

Instance Method

addSubview(_:)

Adds a view to the end of the receivers list of subviews.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func addSubview(_ view: UIView)

Parameters

view

The view to be added. After being added, this view appears on top of any other subviews.

Discussion

This method establishes a strong reference to view and sets its next responder to the receiver, which is its new superview.

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

See Also

Managing the view hierarchy

var superview: UIView?

The receivers superview, or nil if it has none.

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func sendSubviewToBack(UIView)

Moves the specified subview so that it appears behind its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.


https://developer.apple.com/documentation/uikit/uiview/insertsubview(_:abovesubview:)

#app-main)

  • UIKit
  • UIView
  • insertSubview(_:aboveSubview:)

Instance Method

insertSubview(_:aboveSubview:)

Inserts a view above another view in the view hierarchy.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func insertSubview( _ view: UIView, aboveSubview siblingSubview: UIView )

Parameters

view

The view to insert. Its removed from its superview if its not a sibling of siblingSubview.

siblingSubview

The sibling view that will be behind the inserted view.

Discussion

This method establishes a strong reference to view and sets its next responder to the receiver, which is its new superview.

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

See Also

Managing the view hierarchy

var superview: UIView?

The receivers superview, or nil if it has none.

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func sendSubviewToBack(UIView)

Moves the specified subview so that it appears behind its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.


https://developer.apple.com/documentation/uikit/uiview/insertsubview(_:belowsubview:)

#app-main)

  • UIKit
  • UIView
  • insertSubview(_:belowSubview:)

Instance Method

insertSubview(_:belowSubview:)

Inserts a view below another view in the view hierarchy.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func insertSubview( _ view: UIView, belowSubview siblingSubview: UIView )

Parameters

view

The view to insert below another view. Its removed from its superview if its not a sibling of siblingSubview.

siblingSubview

The sibling view that will be above the inserted view.

Discussion

This method establishes a strong reference to view and sets its next responder to the receiver, which is its new superview.

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

See Also

Managing the view hierarchy

var superview: UIView?

The receivers superview, or nil if it has none.

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func sendSubviewToBack(UIView)

Moves the specified subview so that it appears behind its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.


https://developer.apple.com/documentation/uikit/uiview/exchangesubview(at:withsubviewat:)


https://developer.apple.com/documentation/uikit/uiview/draw(_:)

#app-main)

  • UIKit
  • UIView
  • draw(_:)

Instance Method

draw(_:)

Draws the views image within the passed-in rectangle.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func draw(_ rect: CGRect)

Parameters

rect

The portion of the views bounds that needs to be updated. The first time your view is drawn, this rectangle is typically the entire visible bounds of your view. However, during subsequent drawing operations, the rectangle may specify only part of your view.

Discussion

The default implementation of this method does nothing. Subclasses that use technologies such as Core Graphics and UIKit to draw their views content should override this method and implement their drawing code there. You dont need to override this method if your view sets its content in other ways. For example, you dont need to override this method if your view just displays a background color or if your view sets its content directly using the underlying layer object.

By the time this method is called, UIKit has configured the drawing environment appropriately for your view and you can simply call whatever drawing methods and functions you need to render your content. Specifically, UIKit creates and configures a graphics context for drawing and adjusts the transform of that context so that its origin matches the origin of your views bounds rectangle. You can get a reference to the graphics context using the UIGraphicsGetCurrentContext() function, but dont establish a strong reference to the graphics context because it can change between calls to the draw(_:) method.

Similarly, if you draw using OpenGL ES and the GLKView class, GLKit configures the underlying OpenGL ES context appropriately for your view before calling this method (or the glkView(_:drawIn:) method of your GLKView delegate), so you can simply issue whatever OpenGL ES commands you need to render your content. For more information about how to draw using OpenGL ES, see OpenGL ES Programming Guide.

You should limit any drawing to the rectangle specified in the rect parameter. In addition, if the isOpaque property of your view is set to true, your draw(_:) method must totally fill the specified rectangle with opaque content.

If you subclass UIView directly, your implementation of this method doesnt need to call super. However, if youre subclassing a different view class, you should call super at some point in your implementation.

This method is called when a view is first displayed or when an event occurs that invalidates a visible part of the view. You should never call this method directly yourself. To invalidate part of your view, and thus cause that portion to be redrawn, call the setNeedsDisplay() or setNeedsDisplay(_:) method instead.

In iOS 18 and later, UIKit supports automatic trait tracking inside this method for traits from this views traitCollection. For more information, see Automatic trait tracking.

See Also

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

Views

func updateProperties()

Override point for subclasses to update properties of this view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

Beta

func setNeedsUpdateProperties()

Call to manually request a properties update for the view. Multiple requests may be coalesced into a single update alongside the next layout pass.

func updatePropertiesIfNeeded()

Forces an immediate properties update for this view (and its view controller, if applicable) and any subviews, including any view controllers or views in its subtree.

func layoutSubviews()

Lays out subviews.

func updateConstraints()

Updates constraints for the view.

struct Properties


https://developer.apple.com/documentation/uikit/uiview/setneedsdisplay()

#app-main)

  • UIKit
  • UIView
  • setNeedsDisplay()

Instance Method

setNeedsDisplay()

Marks the receivers entire bounds rectangle as needing to be redrawn.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func setNeedsDisplay()

Discussion

You can use this method or the setNeedsDisplay(_:) to notify the system that your views contents need to be redrawn. This method makes a note of the request and returns immediately. The view is not actually redrawn until the next drawing cycle, at which point all invalidated views are updated.

You should use this method to request that a view be redrawn only when the content or appearance of the view change. If you simply change the geometry of the view, the view is typically not redrawn. Instead, its existing content is adjusted based on the value in the views contentMode property. Redisplaying the existing content improves performance by avoiding the need to redraw content that has not changed.

See Also

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

Drawing and updating the view

func draw(CGRect)

Draws the views image within the passed-in rectangle.

func setNeedsDisplay(CGRect)

Marks the specified rectangle of the receiver as needing to be redrawn.

var contentScaleFactor: CGFloat

The scale factor applied to the view.

func tintColorDidChange()

Called by the system when the tint color property changes.


https://developer.apple.com/documentation/uikit/uiview/setneedsdisplay(_:)

#app-main)

  • UIKit
  • UIView
  • setNeedsDisplay(_:)

Instance Method

setNeedsDisplay(_:)

Marks the specified rectangle of the receiver as needing to be redrawn.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func setNeedsDisplay(_ rect: CGRect)

Parameters

rect

The rectangular region of the receiver to mark as invalid; it should be specified in the coordinate system of the receiver.

Discussion

You can use this method or the setNeedsDisplay() to notify the system that your views contents need to be redrawn. This method adds the specified rectangle into the views current list of invalid rectangles and returns immediately. The view is not actually redrawn until the next drawing cycle, at which point all invalidated views are updated.

You should use this method to request that a view be redrawn only when the content or appearance of the view change. If you simply change the geometry of the view, the view is typically not redrawn. Instead, its existing content is adjusted based on the value in the views contentMode property. Redisplaying the existing content improves performance by avoiding the need to redraw content that has not changed.

See Also

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

Drawing and updating the view

func draw(CGRect)

Draws the views image within the passed-in rectangle.

func setNeedsDisplay()

Marks the receivers entire bounds rectangle as needing to be redrawn.

var contentScaleFactor: CGFloat

The scale factor applied to the view.

func tintColorDidChange()

Called by the system when the tint color property changes.


https://developer.apple.com/documentation/uikit/uiview/center

  • UIKit
  • UIView
  • center

Instance Property

center

The center point of the views frame rectangle.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var center: CGPoint { get set }

Discussion

The center point is specified in points in the coordinate system of its superview. Setting this property updates the origin of the rectangle in the frame property appropriately.

Use this property, instead of the frame property, when you want to change the position of a view. The center point is always valid, even when scaling or rotation factors are applied to the views transform. Changes to this property can be animated.

See Also

Configuring the bounds and frame rectangles

var frame: CGRect

The frame rectangle, which describes the views location and size in its superviews coordinate system.

var bounds: CGRect

The bounds rectangle, which describes the views location and size in its own coordinate system.

var transform: CGAffineTransform

Specifies the transform applied to the view, relative to the center of its bounds.

var transform3D: CATransform3D

The three-dimensional transform to apply to the view.

var anchorPoint: CGPoint

The anchor point of the views bounds rectangle.


https://developer.apple.com/documentation/uikit/uiview/transform

  • UIKit
  • UIView
  • transform

Instance Property

transform

Specifies the transform applied to the view, relative to the center of its bounds.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var transform: CGAffineTransform { get set }

Discussion

Use this property to scale or rotate the views frame rectangle within its superviews coordinate system. (To change the position of the view, modify the center property instead.) The default value of this property is CGAffineTransformIdentity.

Transformations occur relative to the views anchor point. By default, the anchor point is equal to the center point of the frame rectangle. To change the anchor point, modify the anchorPoint property of the views underlying CALayer object.

Changes to this property can be animated.

In iOS 8.0 and later, the transform property does not affect Auto Layout. Auto layout calculates a views alignment rectangle based on its untransformed frame.

See Also

Configuring the bounds and frame rectangles

var frame: CGRect

The frame rectangle, which describes the views location and size in its superviews coordinate system.

var bounds: CGRect

The bounds rectangle, which describes the views location and size in its own coordinate system.

var center: CGPoint

The center point of the views frame rectangle.

var transform3D: CATransform3D

The three-dimensional transform to apply to the view.

var anchorPoint: CGPoint

The anchor point of the views bounds rectangle.


https://developer.apple.com/documentation/uikit/uiview/alpha

  • UIKit
  • UIView
  • alpha

Instance Property

alpha

The views alpha value.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var alpha: CGFloat { get set }

Mentioned in

Configuring the cells for your table

Discussion

The value of this property is a floating-point number in the range 0.0 to 1.0, where 0.0 represents totally transparent and 1.0 represents totally opaque. Changing the value of this property updates the alpha value of the current view only. However, the transparency imparted by that alpha value affects all of the views contents, including its subviews. For example, a subview with an alpha value of 1.0 that is embedded in a parent view with an alpha value of 0.5, appears onscreen as if its alpha value is also 0.5.

Changes to this property can be animated.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/backgroundcolor

  • UIKit
  • UIView
  • backgroundColor

Instance Property

backgroundColor

The views background color.

iOSiPadOSMac CatalysttvOSvisionOS

@NSCopying @MainActor var backgroundColor: UIColor? { get set }

Discussion

Changes to this property can be animated. The default value is nil, which results in a transparent background color.

See Also

Configuring a views visual appearance

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiviewpropertyanimator

  • UIKit
  • UIViewPropertyAnimator

Class

UIViewPropertyAnimator

A class that animates changes to views and allows the dynamic modification of those animations.

@MainActor class UIViewPropertyAnimator

Overview

A UIViewPropertyAnimator object lets you animate changes to views and dynamically modify your animations before they finish. With a property animator, you can run your animations from start to finish normally or you can turn them into interactive animations and control the timing yourself. The animator operates on animatable properties of views, such as the frame, center, alpha, and transform properties, creating the needed animations from the blocks you provide.

When creating a property animator object, you specify the following:

  • A block containing code that modifies the properties of one or more views.

  • The timing curve that defines the speed of the animation over the course of its run.

  • The duration (in seconds) of the animation.

  • An optional completion block to execute when the animations finish.

In your animation blocks, set the value of an animatable property to the final value you want reflected by that view. For example, if you want to fade out a view, you would set its alpha property to 0 in your block. The property animator object creates an animation that adjusts the value of that property from its initial value to the new value that you specified in your block.

The speed at which the value of a property changes is controlled by the timing curve you specify when creating the property animator. Property animators include support for the built-in UIKit animation curves such as linear, ease-in, and ease-out. You can also use a cubic Bezier curve or a spring function to control the timing of the animations.

If you create your animator using one of the standard initialization methods, you must explicitly start your animations by calling the startAnimation() method. If you want to start the animations immediately after the creation of your animator, use the runningPropertyAnimator(withDuration:delay:options:animations:completion:) method instead of the standard initializers.

This class adopts the UIViewAnimating and UIViewImplicitlyAnimating protocols, which define the methods for starting, stopping, and modifying your animations. For more information about the methods of those protocols, see UIViewAnimating and UIViewImplicitlyAnimating.

Modify animations dynamically

A property animator gives you programmatic control over the timing and execution of the animations. Specifically, you can:

  • Start, pause, resume, and stop animations; see the methods of the UIViewAnimating protocol.

  • Add animation blocks after the original animations start using the addAnimations(_:) and addAnimations(_:delayFactor:) methods.

  • Scrub through a paused animation by modifying the fractionComplete property.

  • Change the animations direction using the isReversed property.

  • Modify the timing and duration of a partially complete animation by pausing the animation and using the continueAnimation(withTimingParameters:durationFactor:) method to finish it.

Most of the basic behavior is controlled by the properties of the UIViewAnimating protocol, which this class adopts. Use those methods and properties to start, pause, resume, and stop the animations. You can also use them to scrub through the animation and change its direction. Use the methods and properties of this class to modify the animation blocks themselves and to update the timing information.

Topics

Initializing a property animator

Initializes the animator with a built-in UIKit timing curve.

Initializes the animator object with a cubic Bézier timing curve.

Initializes the animator object with spring-based timing information.

init(duration: TimeInterval, timingParameters: any UITimingCurveProvider)

Initializes the animator object with a custom timing curve object.

Creates and returns an animator object that begins running its animations immediately.

Modifying animations

Adds the specified animation block to the animator.

Adds the specified animation block with a delay.

Adds the specified completion block to the animator.

func continueAnimation(withTimingParameters: (any UITimingCurveProvider)?, durationFactor: CGFloat)

Adjusts the timing and duration of a paused animation.

Accessing the animation parameters

var duration: TimeInterval

The total duration (in seconds) of the main animations.

var delay: TimeInterval

The delay (in seconds) after which the animations begin.

var timingParameters: (any UITimingCurveProvider)?

The information used to determine the timing curve for the animation.

var isInterruptible: Bool

A Boolean value indicating whether the animator is interruptible and can be paused or stopped.

var isUserInteractionEnabled: Bool

A Boolean value indicating whether views receive touch events while animations are running.

var isManualHitTestingEnabled: Bool

A Boolean value indicating whether your app manages hit-testing while animations are in progress.

var scrubsLinearly: Bool

A Boolean value indicating whether a paused animation scrubs linearly or uses its specified timing information.

var pausesOnCompletion: Bool

A Boolean value that indicates whether a completed animation remains in the active state.

Instance Properties

var flushUpdates: Bool

Flush all pending updates (including traits, properties, and layout) whenever the animation context changes. This includes flushing updates:

Beta

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • Sendable
  • UIViewAnimating
  • UIViewImplicitlyAnimating

See Also

Essentials

protocol UIViewAnimating

An interface for implementing custom animator objects.


https://developer.apple.com/documentation/uikit/uiview/init(frame:)

#app-main)

  • UIKit
  • UIView
  • init(frame:)

Initializer

init(frame:)

Creates a view with the specified frame rectangle.

tvOS

@MainActor init(frame: CGRect)

Parameters

frame

The frame rectangle for the view, measured in points. The origin of the frame is relative to the superview in which you plan to add it. This method uses the frame rectangle to set the center and bounds properties accordingly.

Return Value

An initialized view object.

Discussion

The new view object must be inserted into the view hierarchy of a window before it can be used. If you create a view object programmatically, this method is the designated initializer for the UIView class. Subclasses can override this method to perform any custom initialization but must call super at the beginning of their implementation.

If you use Interface Builder to design your interface, this method is not called when your view objects are subsequently loaded from the nib file. Objects in a nib file are reconstituted and then initialized using their doc://com.apple.documentation/documentation/oslog/oslogentry/init(coder:) method, which modifies the attributes of the view to match the attributes stored in the nib file. For detailed information about how views are loaded from a nib file, see Resource Programming Guide.

See Also

Creating a view object

init?(coder: NSCoder)

Creates a view from data in an unarchiver.


https://developer.apple.com/documentation/uikit/uiview/layerclass

  • UIKit
  • UIView
  • layerClass

Type Property

layerClass

Returns the class used to create the layer for instances of this class.

tvOS

@MainActor class var layerClass: AnyClass { get }

Return Value

The class used to create the views Core Animation layer.

Discussion

This method returns the CALayer class object by default. Subclasses can override this method and return a different layer class as needed. For example, if your view uses tiling to display a large scrollable area, you might want to override this property and return the CATiledLayer class, as shown in the following code.

override class var layerClass : AnyClass { return CATiledLayer.self }

This method is called only once early in the creation of the view in order to create the corresponding layer object.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/draw(_:for:)

#app-main)

  • UIKit
  • UIView
  • draw(_:for:)

Instance Method

draw(_:for:)

Implemented to draw the views content for printing.

iOSiPadOSMac CatalystvisionOS

@MainActor func draw( _ rect: CGRect, for formatter: UIViewPrintFormatter )

Parameters

rect

A rectangle that defines the area for drawing printable content.

formatter

An instance of UIViewPrintFormatter obtained by calling the viewPrintFormatter() method.

Discussion

You implement this method if you want a views printed content to appear differently than its displayed content. If you add a view print formatter to a print job but do not implement this method, the views draw(_:) method is called to provide the content for printing.

For more information about how to implement a custom drawing routine for printed content, see Drawing and Printing Guide for iOS.

See Also

Formatting printed view content

Returns a print formatter for the receiving view.


https://developer.apple.com/documentation/uikit/uiview/requiresconstraintbasedlayout

  • UIKit
  • UIView
  • requiresConstraintBasedLayout

Type Property

requiresConstraintBasedLayout

A Boolean value that indicates whether the receiver depends on the constraint-based layout system.

tvOS

@MainActor class var requiresConstraintBasedLayout: Bool { get }

Return Value

true if the view must be in a window using constraint-based layout to function properly, false otherwise.

Discussion

Custom views should override this to return true if they cannot layout correctly using autoresizing.

See Also

Laying out subviews

func layoutSubviews()

Lays out subviews.

func setNeedsLayout()

Invalidates the current layout of the receiver and triggers a layout update during the next update cycle.

func layoutIfNeeded()

Lays out the subviews immediately, if layout updates are pending.

var translatesAutoresizingMaskIntoConstraints: Bool

A Boolean value that determines whether the views autoresizing mask is translated into Auto Layout constraints.


https://developer.apple.com/documentation/uikit/uiview/updateconstraints()

#app-main)

  • UIKit
  • UIView
  • updateConstraints()

Instance Method

updateConstraints()

Updates constraints for the view.

tvOS

@MainActor func updateConstraints()

Discussion

Override this method to optimize changes to your constraints.

To schedule a change, call setNeedsUpdateConstraints() on the view. The system then calls your implementation of updateConstraints() before the layout occurs. This lets you verify that all necessary constraints for your content are in place at a time when your custom views properties arent changing.

Your implementation must be as efficient as possible. Dont deactivate all your constraints, then reactivate the ones you need. Instead, your app must have some way of tracking your constraints, and validating them during each update pass. Only change items that need to be changed. During each update pass, you must ensure that you have the appropriate constraints for the apps current state.

Dont call setNeedsUpdateConstraints() inside your implementation. Calling setNeedsUpdateConstraints() schedules another update pass, creating a feedback loop.

In iOS 18 and later, UIKit supports automatic trait tracking inside this method for traits from this views traitCollection. For more information, see Automatic trait tracking.

See Also

Views

func updateProperties()

Override point for subclasses to update properties of this view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

Beta

func setNeedsUpdateProperties()

Call to manually request a properties update for the view. Multiple requests may be coalesced into a single update alongside the next layout pass.

func updatePropertiesIfNeeded()

Forces an immediate properties update for this view (and its view controller, if applicable) and any subviews, including any view controllers or views in its subtree.

func layoutSubviews()

Lays out subviews.

func draw(CGRect)

Draws the views image within the passed-in rectangle.

struct Properties


https://developer.apple.com/documentation/uikit/uiview/alignmentrect(forframe:)

#app-main)

  • UIKit
  • UIView
  • alignmentRect(forFrame:)

Instance Method

alignmentRect(forFrame:)

Returns the views alignment rectangle for a given frame.

tvOS

@MainActor

Parameters

frame

The frame whose corresponding alignment rectangle is desired.

Return Value

The alignment rectangle for the specified frame.

Discussion

The constraint-based layout system uses alignment rectangles to align views, rather than their frame. This allows custom views to be aligned based on the location of their content while still having a frame that encompasses any ornamentation they need to draw around their content, such as shadows or reflections.

The default implementation returns the views frame modified by the views alignmentRectInsets. Most custom views can use alignmentRectInsets to specify the location of their content within their frame. Custom views that require arbitrary transformations can override alignmentRect(forFrame:) and frame(forAlignmentRect:) to describe the location of their content. These two methods must always be inverses of each other.

See Also

Aligning views in Auto Layout

Returns the views frame for a given alignment rectangle.

var alignmentRectInsets: UIEdgeInsets

The insets from the views frame that define its alignment rectangle.

var forFirstBaselineLayout: UIView

Returns a view used to satisfy first baseline constraints.

var forLastBaselineLayout: UIView

Returns a view used to satisfy last baseline constraints.


https://developer.apple.com/documentation/uikit/uiview/frame(foralignmentrect:)

#app-main)

  • UIKit
  • UIView
  • frame(forAlignmentRect:)

Instance Method

frame(forAlignmentRect:)

Returns the views frame for a given alignment rectangle.

tvOS

@MainActor

Parameters

alignmentRect

The alignment rectangle whose corresponding frame is desired.

Return Value

The frame for the specified alignment rectangle

Discussion

The constraint-based layout system uses alignment rectangles to align views, rather than their frame. This allows custom views to be aligned based on the location of their content while still having a frame that encompasses any ornamentation they need to draw around their content, such as shadows or reflections.

The default implementation returns alignmentRect modified by the views alignmentRectInsets. Most custom views can override alignmentRectInsets to specify the location of their content within their frame. Custom views that require arbitrary transformations can override alignmentRect(forFrame:) and frame(forAlignmentRect:) to describe the location of their content. These two methods must always be inverses of each other.

See Also

Aligning views in Auto Layout

Returns the views alignment rectangle for a given frame.

var alignmentRectInsets: UIEdgeInsets

The insets from the views frame that define its alignment rectangle.

var forFirstBaselineLayout: UIView

Returns a view used to satisfy first baseline constraints.

var forLastBaselineLayout: UIView

Returns a view used to satisfy last baseline constraints.


https://developer.apple.com/documentation/uikit/uiview/didaddsubview(_:)

#app-main)

  • UIKit
  • UIView
  • didAddSubview(_:)

Instance Method

didAddSubview(_:)

Tells the view that a subview was added.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func didAddSubview(_ subview: UIView)

Parameters

subview

The view that was added as a subview.

Discussion

The default implementation of this method does nothing. Subclasses can override it to perform additional actions when subviews are added. This method is called in response to adding a subview using any of the relevant view methods.

See Also

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func willRemoveSubview(UIView)

Tells the view that a subview is about to be removed.

func willMove(toSuperview: UIView?)

Tells the view that its superview is about to change to the specified superview.

func didMoveToSuperview()

Tells the view that its superview changed.

func willMove(toWindow: UIWindow?)

Tells the view that its window object is about to change.

func didMoveToWindow()

Tells the view that its window object changed.


https://developer.apple.com/documentation/uikit/uiview/willremovesubview(_:)

#app-main)

  • UIKit
  • UIView
  • willRemoveSubview(_:)

Instance Method

willRemoveSubview(_:)

Tells the view that a subview is about to be removed.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func willRemoveSubview(_ subview: UIView)

Parameters

subview

The subview that will be removed.

Discussion

The default implementation of this method does nothing. Subclasses can override it to perform additional actions whenever subviews are removed. This method is called when the subviews superview changes or when the subview is removed from the view hierarchy completely.

See Also

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func didAddSubview(UIView)

Tells the view that a subview was added.

func willMove(toSuperview: UIView?)

Tells the view that its superview is about to change to the specified superview.

func didMoveToSuperview()

Tells the view that its superview changed.

func willMove(toWindow: UIWindow?)

Tells the view that its window object is about to change.

func didMoveToWindow()

Tells the view that its window object changed.


https://developer.apple.com/documentation/uikit/uiview/willmove(tosuperview:)

#app-main)

  • UIKit
  • UIView
  • willMove(toSuperview:)

Instance Method

willMove(toSuperview:)

Tells the view that its superview is about to change to the specified superview.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func willMove(toSuperview newSuperview: UIView?)

Parameters

newSuperview

A view object that will be the new superview of the receiver. This object may be nil.

Discussion

The default implementation of this method does nothing. Subclasses can override it to perform additional actions whenever the superview changes.

See Also

func didAddSubview(UIView)

Tells the view that a subview was added.

func willRemoveSubview(UIView)

Tells the view that a subview is about to be removed.

func didMoveToSuperview()

Tells the view that its superview changed.

func willMove(toWindow: UIWindow?)

Tells the view that its window object is about to change.

func didMoveToWindow()

Tells the view that its window object changed.


https://developer.apple.com/documentation/uikit/uiview/didmovetosuperview()

#app-main)

  • UIKit
  • UIView
  • didMoveToSuperview()

Instance Method

didMoveToSuperview()

Tells the view that its superview changed.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func didMoveToSuperview()

Discussion

The default implementation of this method does nothing. Subclasses can override it to perform additional actions whenever the superview changes.

See Also

func didAddSubview(UIView)

Tells the view that a subview was added.

func willRemoveSubview(UIView)

Tells the view that a subview is about to be removed.

func willMove(toSuperview: UIView?)

Tells the view that its superview is about to change to the specified superview.

func willMove(toWindow: UIWindow?)

Tells the view that its window object is about to change.

func didMoveToWindow()

Tells the view that its window object changed.


https://developer.apple.com/documentation/uikit/uiview/gesturerecognizershouldbegin(_:)

#app-main)

  • UIKit
  • UIView
  • gestureRecognizerShouldBegin(_:)

Instance Method

gestureRecognizerShouldBegin(_:)

Asks the view if the gesture recognizer should continue tracking touch events.

tvOS

@MainActor

Parameters

gestureRecognizer

The gesture recognizer thats attempting to transition out of the UIGestureRecognizer.State.possible state.

Return Value

true if the gesture recognizer should continue tracking touch events and use them to trigger a gesture or false if it should transition to the UIGestureRecognizer.State.failed state.

Discussion

Subclasses may override this method and use it to prevent the recognition of particular gestures. For example, the UISlider class uses this method to prevent swipes parallel to the sliders travel direction and that start in the thumb.

At the time this method is called, the gesture recognizer is in the UIGestureRecognizer.State.possible state and thinks it has the events needed to move to the UIGestureRecognizer.State.began state.

The default implementation of this method returns true.

See Also

Managing gesture recognizers

func addGestureRecognizer(UIGestureRecognizer)

Attaches a gesture recognizer to the view.

func removeGestureRecognizer(UIGestureRecognizer)

Detaches a gesture recognizer from the receiving view.

var gestureRecognizers: [UIGestureRecognizer]?

The gesture-recognizer objects currently attached to the view.


https://developer.apple.com/documentation/uikit/uiresponder/touchesbegan(_:with:)


https://developer.apple.com/documentation/uikit/uiresponder/touchesmoved(_:with:)

#app-main)

  • UIKit
  • UIResponder
  • touchesMoved(_:with:)

Instance Method

touchesMoved(_:with:)

Tells the responder when one or more touches associated with an event changed.

tvOS

@MainActor func touchesMoved(

with event: UIEvent? )

Parameters

touches

A set of UITouch instances that represent the touches whose values changed. These touches all belong to the specified event. For touches in a view, this set contains only one touch by default. To receive multiple touches, you must set the views isMultipleTouchEnabled property to true.

event

The event to which the touches belong.

Mentioned in

Implementing a Multi-Touch app

Implementing a Continuous Gesture Recognizer

Implementing a Discrete Gesture Recognizer

Discussion

UIKit calls this method when the location or force of a touch changes. Many UIKit classes override this method and use it to handle the corresponding touch events. The default implementation of this method forwards the message up the responder chain. When creating your own subclasses, call super to forward any events that you dont handle yourself, like in the following code.

super.touchesMoved(touches, with: event)

[super touchesMoved:touches withEvent:event];

If you override this method without calling super (a common use pattern), you must also override the other methods for handling touch events, even if your implementations do nothing.

See Also

Responding to touch events

Tells this object that one or more new touches occurred in a view or window.

Tells the responder when one or more fingers are raised from a view or window.

Tells the responder when a system event (such as a system alert) cancels a touch sequence.

Tells the responder that updated values were received for previously estimated properties or that an update is no longer expected.


https://developer.apple.com/documentation/uikit/uiresponder/touchesended(_:with:)

#app-main)

  • UIKit
  • UIResponder
  • touchesEnded(_:with:)

Instance Method

touchesEnded(_:with:)

Tells the responder when one or more fingers are raised from a view or window.

tvOS

@MainActor func touchesEnded(

with event: UIEvent? )

Parameters

touches

A set of UITouch instances that represent the touches for the ending phase of the event represented by event. For touches in a view, this set contains only one touch by default. To receive multiple touches, you must set the views isMultipleTouchEnabled property to true.

event

The event to which the touches belong.

Mentioned in

Implementing a Multi-Touch app

Implementing a Discrete Gesture Recognizer

Implementing coalesced touch support in an app

Implementing a Continuous Gesture Recognizer

Discussion

UIKit calls this method when a finger or Apple Pencil is no longer touching the screen. Many UIKit classes override this method and use it to clean up state involved in the handling of the corresponding touch events. The default implementation of this method forwards the message up the responder chain. When creating your own subclasses, call super to forward any events that you dont handle yourself, like in the following code.

super.touchesEnded(touches, with: event)

[super touchesEnded:touches withEvent:event];

If you override this method without calling super (a common use pattern), you must also override the other methods for handling touch events, even if your implementations do nothing.

See Also

Responding to touch events

Tells this object that one or more new touches occurred in a view or window.

Tells the responder when one or more touches associated with an event changed.

Tells the responder when a system event (such as a system alert) cancels a touch sequence.

Tells the responder that updated values were received for previously estimated properties or that an update is no longer expected.


https://developer.apple.com/documentation/uikit/uiresponder/touchescancelled(_:with:)

#app-main)

  • UIKit
  • UIResponder
  • touchesCancelled(_:with:)

Instance Method

touchesCancelled(_:with:)

Tells the responder when a system event (such as a system alert) cancels a touch sequence.

tvOS

@MainActor func touchesCancelled(

with event: UIEvent? )

Parameters

touches

A set of UITouch instances that represent the touches for the ending phase of the event represented by event. For touches in a view, this set contains only one touch by default. To receive multiple touches, you must set the views isMultipleTouchEnabled property to true.

event

The event to which the touches belong.

Mentioned in

Implementing a Multi-Touch app

Implementing coalesced touch support in an app

About the Gesture Recognizer State Machine

Implementing a Discrete Gesture Recognizer

Implementing a Continuous Gesture Recognizer

Discussion

UIKit calls this method when it receives a system interruption requiring cancellation of the touch sequence. An interruption is anything that causes the application to become inactive or causes the view handling the touch events to be removed from its window. Your implementation of this method should clean up any state associated with handling the touch sequence. The default implementation of this method forwards the message up the responder chain. When creating your own subclasses, call super to forward any events that you dont handle yourself, like in the following code.

super.touchesCancelled(touches, with: event)

[super touchesCancelled:touches withEvent:event];

If you override this method without calling super (a common use pattern), you must also override the other methods for handling touch events, if only as stub (empty) implementations.

See Also

Responding to touch events

Tells this object that one or more new touches occurred in a view or window.

Tells the responder when one or more touches associated with an event changed.

Tells the responder when one or more fingers are raised from a view or window.

Tells the responder that updated values were received for previously estimated properties or that an update is no longer expected.


https://developer.apple.com/documentation/uikit/uiview/addconstraint(_:)

#app-main)

  • UIKit
  • UIView
  • addConstraint(_:)

Instance Method

addConstraint(_:)

Adds a constraint on the layout of the receiving view or its subviews.

tvOS

@MainActor func addConstraint(_ constraint: NSLayoutConstraint)

Parameters

constraint

The constraint to be added to the view. The constraint may only reference the view itself or its subviews.

Discussion

The constraint must involve only views that are within scope of the receiving view. Specifically, any views involved must be either the receiving view itself, or a subview of the receiving view. Constraints that are added to a view are said to be held by that view. The coordinate system used when evaluating the constraint is the coordinate system of the view that holds the constraint.

When developing for iOS 8.0 or later, set the constraints isActive property to true instead of calling the addConstraint(_:) method directly. The isActive property automatically adds and removes the constraint from the correct view.

See Also

Managing the views constraints

var constraints: [NSLayoutConstraint]

The constraints held by the view.

func addConstraints([NSLayoutConstraint])

Adds multiple constraints on the layout of the receiving view or its subviews.

func removeConstraint(NSLayoutConstraint)

Removes the specified constraint from the view.

func removeConstraints([NSLayoutConstraint])

Removes the specified constraints from the view.


https://developer.apple.com/documentation/uikit/uiview/autoresizingmask-swift.property

  • UIKit
  • UIView
  • autoresizingMask

Instance Property

autoresizingMask

An integer bit mask that determines how the receiver resizes itself when its superviews bounds change.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var autoresizingMask: UIView.AutoresizingMask { get set }

Discussion

When a views bounds change, that view automatically resizes its subviews according to each subviews autoresizing mask. You specify the value of this mask by combining the constants described in UIView.AutoresizingMask using the C bitwise OR operator. Combining these constants lets you specify which dimensions of the view should grow or shrink relative to the superview. The default value of this property is UIViewAutoresizingNone, which indicates that the view should not be resized at all.

When more than one option along the same axis is set, the default behavior is to distribute the size difference proportionally among the flexible portions. The larger the flexible portion, relative to the other flexible portions, the more it is likely to grow. For example, suppose this property includes the flexibleWidth and flexibleRightMargin constants but does not include the flexibleLeftMargin constant, thus indicating that the width of the views left margin is fixed but that the views width and right margin may change. Thus, the view appears anchored to the left side of its superview while both the view width and the gap to the right of the view increase.

If the autoresizing behaviors do not offer the precise layout that you need for your views, you can use a custom container view and override its layoutSubviews() method to position your subviews more precisely.

See Also

Configuring the resizing behavior

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

enum ContentMode

Options to specify how a view adjusts its content when its size changes.

Asks the view to calculate and return the size that best fits the specified size.

func sizeToFit()

Resizes and moves the receiver view so it just encloses its subviews.

var autoresizesSubviews: Bool

A Boolean value that determines whether the receiver automatically resizes its subviews when its bounds change.


https://developer.apple.com/documentation/uikit/uiview/contentmode-swift.property

  • UIKit
  • UIView
  • contentMode

Instance Property

contentMode

A flag used to determine how a view lays out its content when its bounds change.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var contentMode: UIView.ContentMode { get set }

Discussion

The content mode specifies how the cached bitmap of the views layer is adjusted when the views bounds change. This property is often used to implement resizable controls. Instead of redrawing the contents of the view every time, you can use this property to specify that you want to scale the contents (either with or without distortion) or pin them to a particular spot on the view.

For a list of values you can assign to this property, see UIView.ContentMode. The default value of this property is UIView.ContentMode.scaleToFill.

See Also

Configuring the resizing behavior

enum ContentMode

Options to specify how a view adjusts its content when its size changes.

Asks the view to calculate and return the size that best fits the specified size.

func sizeToFit()

Resizes and moves the receiver view so it just encloses its subviews.

var autoresizesSubviews: Bool

A Boolean value that determines whether the receiver automatically resizes its subviews when its bounds change.

var autoresizingMask: UIView.AutoresizingMask

An integer bit mask that determines how the receiver resizes itself when its superviews bounds change.


https://developer.apple.com/documentation/uikit/uiview/ishidden

  • UIKit
  • UIView
  • isHidden

Instance Property

isHidden

A Boolean value that determines whether the view is hidden.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var isHidden: Bool { get set }

Discussion

Setting the value of this property to true hides the receiver and setting it to false shows the receiver. The default value is false.

A hidden view disappears from its window and does not receive input events. It remains in its superviews list of subviews, however, and participates in autoresizing as usual. Hiding a view with subviews has the effect of hiding those subviews and any view descendants they might have. This effect is implicit and does not alter the hidden state of the receivers descendants.

Hiding the view that is the windows current first responder causes the views next valid key view to become the new first responder.

The value of this property reflects the state of the receiver only and does not account for the state of the receivers ancestors in the view hierarchy. Thus this property can be false but the receiver may still be hidden if an ancestor is hidden.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/init(coder:)

#app-main)

  • UIKit
  • UIView
  • init(coder:)

Initializer

init(coder:)

Creates a view from data in an unarchiver.

tvOS

@MainActor init?(coder: NSCoder)

See Also

Creating a view object

init(frame: CGRect)

Creates a view with the specified frame rectangle.


https://developer.apple.com/documentation/uikit/uiview/isopaque


https://developer.apple.com/documentation/uikit/uiview/tintcolor

  • UIKit
  • UIView
  • tintColor

Instance Property

tintColor

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

tvOS

@MainActor var tintColor: UIColor! { get set }

Discussion

If the system cannot find a nondefault color in the hierarchy, this propertys value is a system-defined color instead.

If the views tintAdjustmentMode propertys value is UIView.TintAdjustmentMode.dimmed, then the tintColor property value is automatically dimmed.

To refresh subview rendering when this property changes, override the tintColorDidChange() method.

Colors that are pattern colors (as described in UIColor) are not supported.

See Also

func tintColorDidChange()

Called by the system when the tint color property changes.

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/tintadjustmentmode-swift.property

  • UIKit
  • UIView
  • tintAdjustmentMode

Instance Property

tintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

tvOS

@MainActor var tintAdjustmentMode: UIView.TintAdjustmentMode { get set }

Discussion

When this propertys value is UIView.TintAdjustmentMode.dimmed, the value of the tintColor property is modified to provide a dimmed appearance.

If the system cannot find a non-default value in the subview hierarchy when you query this property, the value is UIView.TintAdjustmentMode.normal.

When this propertys value changes (either by the views value changing or by one of its superviews values changing), the system calls the tintColorDidChange() method to allow the view to refresh its rendering.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/clearscontextbeforedrawing

  • UIKit
  • UIView
  • clearsContextBeforeDrawing

Instance Property

clearsContextBeforeDrawing

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var clearsContextBeforeDrawing: Bool { get set }

Discussion

When set to true, the drawing buffer is automatically cleared to transparent black before the draw(_:) method is called. This behavior ensures that there are no visual artifacts left over when the views contents are redrawn. If the views isOpaque property is also set to true, the backgroundColor property of the view must not be nil or drawing errors may occur. The default value of this property is true.

If you set the value of this property to false, you are responsible for ensuring the contents of the view are drawn properly in your draw(_:) method. If your drawing code is already heavily optimized, setting this property is false can improve performance, especially during scrolling when only a portion of the view might need to be redrawn.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/mask

  • UIKit
  • UIView
  • mask

Instance Property

mask

An optional view whose alpha channel is used to mask a views content.

tvOS

@MainActor var mask: UIView? { get set }

Discussion

The views alpha channel determines how much of the views content and background shows through. Fully or partially opaque pixels allow the underlying content to show through but fully transparent pixels block that content.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.

var layer: CALayer

The views Core Animation layer to use for rendering.


https://developer.apple.com/documentation/uikit/uiview/layer

  • UIKit
  • UIView
  • layer

Instance Property

layer

The views Core Animation layer to use for rendering.

tvOS

@MainActor var layer: CALayer { get }

Discussion

This property is never nil. The value of the layerClass property determines the actual class of the layer object. The view is the layers delegate.

See Also

Configuring a views visual appearance

var backgroundColor: UIColor?

The views background color.

var isHidden: Bool

A Boolean value that determines whether the view is hidden.

var alpha: CGFloat

The views alpha value.

var isOpaque: Bool

A Boolean value that determines whether the view is opaque.

var tintColor: UIColor!

The first nondefault tint color value in the views hierarchy, ascending from and starting with the view itself.

var tintAdjustmentMode: UIView.TintAdjustmentMode

The first non-default tint adjustment mode value in the views hierarchy, ascending from and starting with the view itself.

var clipsToBounds: Bool

A Boolean value that determines whether subviews are confined to the bounds of the view.

var clearsContextBeforeDrawing: Bool

A Boolean value that determines whether the views bounds should be automatically cleared before drawing.

var mask: UIView?

An optional view whose alpha channel is used to mask a views content.

class var layerClass: AnyClass

Returns the class used to create the layer for instances of this class.


https://developer.apple.com/documentation/uikit/uiview/isuserinteractionenabled

  • UIKit
  • UIView
  • isUserInteractionEnabled

Instance Property

isUserInteractionEnabled

A Boolean value that determines whether user events are ignored and removed from the event queue.

tvOS

@MainActor var isUserInteractionEnabled: Bool { get set }

Mentioned in

Handling tap gestures

Handling pan gestures

Handling rotation gestures

Handling long-press gestures

Handling swipe gestures

Discussion

When set to false, touch, press, keyboard, and focus events intended for the view are ignored and removed from the event queue. When set to true, events are delivered to the view normally. The default value of this property is true.

During an animation, user interactions are temporarily disabled for all views involved in the animation, regardless of the value in this property. You can disable this behavior by specifying the allowUserInteraction option when configuring the animation.

See Also

var isMultipleTouchEnabled: Bool

A Boolean value that indicates whether the view receives more than one touch at a time.

var isExclusiveTouch: Bool

A Boolean value that indicates whether the receiver handles touch events exclusively.


https://developer.apple.com/documentation/uikit/uiview/ismultipletouchenabled

  • UIKit
  • UIView
  • isMultipleTouchEnabled

Instance Property

isMultipleTouchEnabled

A Boolean value that indicates whether the view receives more than one touch at a time.

iOSiPadOSMac CatalystvisionOS

@MainActor var isMultipleTouchEnabled: Bool { get set }

Discussion

When set to true, the view receives all touches associated with a multi-touch sequence and starting within the views bounds. When set to false, the view receives only the first touch event in a multi-touch sequence that start within the views bounds. The default value of this property is false.

Other views in the same window can still receive touch events when this property is false. If you want this view to handle multi-touch events exclusively, set the values of both this property and the isExclusiveTouch property to true. This property does not prevent a view from being asked to handle multiple touches. For example, two subviews may both forward their touches to a common parent, such as a window or the root view of a view controller. This property determines how many touches initially targeting the view are delivered to that view.

See Also

var isUserInteractionEnabled: Bool

A Boolean value that determines whether user events are ignored and removed from the event queue.

var isExclusiveTouch: Bool

A Boolean value that indicates whether the receiver handles touch events exclusively.


https://developer.apple.com/documentation/uikit/uiview/isexclusivetouch

  • UIKit
  • UIView
  • isExclusiveTouch

Instance Property

isExclusiveTouch

A Boolean value that indicates whether the receiver handles touch events exclusively.

iOSiPadOSMac CatalystvisionOS

@MainActor var isExclusiveTouch: Bool { get set }

Discussion

Setting this property to true causes the receiver to block the delivery of touch events to other views in the same window. The default value of this property is false.

See Also

var isUserInteractionEnabled: Bool

A Boolean value that determines whether user events are ignored and removed from the event queue.

var isMultipleTouchEnabled: Bool

A Boolean value that indicates whether the view receives more than one touch at a time.


https://developer.apple.com/documentation/uikit/uiview/transform3d

  • UIKit
  • UIView
  • transform3D

Instance Property

transform3D

The three-dimensional transform to apply to the view.

@MainActor var transform3D: CATransform3D { get set }

Discussion

The default value of this property is CATransform3DIdentity.

See Also

Configuring the bounds and frame rectangles

var frame: CGRect

The frame rectangle, which describes the views location and size in its superviews coordinate system.

var bounds: CGRect

The bounds rectangle, which describes the views location and size in its own coordinate system.

var center: CGPoint

The center point of the views frame rectangle.

var transform: CGAffineTransform

Specifies the transform applied to the view, relative to the center of its bounds.

var anchorPoint: CGPoint

The anchor point of the views bounds rectangle.


https://developer.apple.com/documentation/uikit/uiview/anchorpoint

  • UIKit
  • UIView
  • anchorPoint

Instance Property

anchorPoint

The anchor point of the views bounds rectangle.

@MainActor var anchorPoint: CGPoint { get set }

Discussion

You specify the value for this property using the unit coordinate space, where ( 0, 0) is the bottom-left corner of the views bounds rectangle, and ( 1, 1) is the top-right corner. The default value of this property is ( 0.5, 0.5), which represents the center of the views bounds rectangle.

All geometric manipulations to the view occur about the specified point. For example, applying a rotation transform to a view with the default anchor point causes the view to rotate around its center. Changing the anchor point to a different location causes the view to rotate around that new point.

See Also

Configuring the bounds and frame rectangles

var frame: CGRect

The frame rectangle, which describes the views location and size in its superviews coordinate system.

var bounds: CGRect

The bounds rectangle, which describes the views location and size in its own coordinate system.

var center: CGPoint

The center point of the views frame rectangle.

var transform: CGAffineTransform

Specifies the transform applied to the view, relative to the center of its bounds.

var transform3D: CATransform3D

The three-dimensional transform to apply to the view.


https://developer.apple.com/documentation/uikit/uiview/superview

  • UIKit
  • UIView
  • superview

Instance Property

superview

The receivers superview, or nil if it has none.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var superview: UIView? { get }

See Also

Managing the view hierarchy

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func sendSubviewToBack(UIView)

Moves the specified subview so that it appears behind its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.


https://developer.apple.com/documentation/uikit/uiview/window


https://developer.apple.com/documentation/uikit/uiview/bringsubviewtofront(_:)


https://developer.apple.com/documentation/uikit/uiview/sendsubviewtoback(_:)

#app-main)

  • UIKit
  • UIView
  • sendSubviewToBack(_:)

Instance Method

sendSubviewToBack(_:)

Moves the specified subview so that it appears behind its siblings.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func sendSubviewToBack(_ view: UIView)

Parameters

view

The subview to move to the back.

Discussion

This method moves the specified view to the beginning of the array of views in the subviews property.

See Also

Managing the view hierarchy

var superview: UIView?

The receivers superview, or nil if it has none.

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.


https://developer.apple.com/documentation/uikit/uiview/removefromsuperview()


https://developer.apple.com/documentation/uikit/uiview/insertsubview(_:at:)


https://developer.apple.com/documentation/uikit/uiview/isdescendant(of:)

#app-main)

  • UIKit
  • UIView
  • isDescendant(of:)

Instance Method

isDescendant(of:)

Returns a Boolean value indicating whether the receiver is a subview of a given view or identical to that view.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor

Parameters

view

The view to test against the receivers view hierarchy.

Return Value

true if the receiver is an immediate or distant subview of view or if view is the receiver itself; otherwise false.

See Also

Managing the view hierarchy

var superview: UIView?

The receivers superview, or nil if it has none.

var subviews: [UIView]

The receivers immediate subviews.

var window: UIWindow?

The receivers window object, or nil if it has none.

func addSubview(UIView)

Adds a view to the end of the receivers list of subviews.

func bringSubviewToFront(UIView)

Moves the specified subview so that it appears on top of its siblings.

func sendSubviewToBack(UIView)

Moves the specified subview so that it appears behind its siblings.

func removeFromSuperview()

Unlinks the view from its superview and its window, and removes it from the responder chain.

func insertSubview(UIView, at: Int)

Inserts a subview at the specified index.

func insertSubview(UIView, aboveSubview: UIView)

Inserts a view above another view in the view hierarchy.

func insertSubview(UIView, belowSubview: UIView)

Inserts a view below another view in the view hierarchy.

func exchangeSubview(at: Int, withSubviewAt: Int)

Exchanges the subviews at the specified indices.


https://developer.apple.com/documentation/uikit/uiview/willmove(towindow:)

#app-main)

  • UIKit
  • UIView
  • willMove(toWindow:)

Instance Method

willMove(toWindow:)

Tells the view that its window object is about to change.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func willMove(toWindow newWindow: UIWindow?)

Parameters

newWindow

The window object that will be at the root of the receivers new view hierarchy. This parameter may be nil.

Discussion

The default implementation of this method does nothing. Subclasses can override it to perform additional actions whenever the window changes.

See Also

func didAddSubview(UIView)

Tells the view that a subview was added.

func willRemoveSubview(UIView)

Tells the view that a subview is about to be removed.

func willMove(toSuperview: UIView?)

Tells the view that its superview is about to change to the specified superview.

func didMoveToSuperview()

Tells the view that its superview changed.

func didMoveToWindow()

Tells the view that its window object changed.


https://developer.apple.com/documentation/uikit/uiview/didmovetowindow()


https://developer.apple.com/documentation/uikit/uiview/updatetraitsifneeded()

#app-main)

  • UIKit
  • UIView
  • updateTraitsIfNeeded()

Instance Method

updateTraitsIfNeeded()

@MainActor func updateTraitsIfNeeded()


https://developer.apple.com/documentation/uikit/uiview/traitoverrides-fd9z

  • UIKit
  • UIView
  • traitOverrides

Instance Property

traitOverrides

Mac CatalystvisionOS

@MainActor @preconcurrency var traitOverrides: UITraitOverrides { get set }

See Also

Overriding trait values

struct UITraitOverrides


https://developer.apple.com/documentation/uikit/uitraitoverrides-swift.struct

  • UIKit
  • UITraitOverrides

Structure

UITraitOverrides

Mac CatalystvisionOS

struct UITraitOverrides

Topics

Instance Methods

func remove(UITrait)

Relationships

Conforms To

  • Copyable
  • CustomDebugStringConvertible
  • CustomReflectable
  • CustomStringConvertible
  • UIMutableTraits

See Also

Overriding trait values

var traitOverrides: UITraitOverrides


https://developer.apple.com/documentation/uikit/positioning-content-within-layout-margins

  • UIKit
  • View layout
  • Positioning content within layout margins

Article

Positioning content within layout margins

Position views so that they arent crowded by other content.

Overview

Layout margins provide a visual buffer between a views content and any content outside of the views bounds. The layout margins consist of inset values for each edge (top, bottom, leading, and trailing) of the view. These inset values create a space between the edges of the views bounds rectangle and the content inside the view. The following image shows two views with different sets of layout margins. Apart from the empty space they add around your content, margins have no visible representation.

To set up constraints that respect the layout margins, enable the Constrain to margins option in Xcode, as shown in the following image. (If you dont enable that option, Xcode creates your constraints relative to the views bounds rectangle.) If the superviews margins change later, the positions of elements tied to those margins are updated accordingly.

Even if you arent using constraints to position your content, you can still manually position content relative to a views layout margins. The directionalLayoutMargins property of each view contains the edge inset values to use for the views margins. Take those margin values into account when computing the position of items in your view.

Change the default layout margins

UIKit provides default layout margins for each view, but you can change the default values to values that are more appropriate for your view. To change a views margin values, update the views directionalLayoutMargins property. (You can also use the Size inspector to set the value of that property at design time. In the Layout Margins section, choose the Language Directional option and enter the margin values for each of the views edges, as shown in the following image.)

For the root view of a view controller, UIKit enforces a set of minimum layout margins to ensure that content is displayed correctly. When the values in the directionalLayoutMargins property are less than the minimum values, UIKit uses the minimum values instead. You can get the minimum margin values from the systemMinimumLayoutMargins property of the view controller. To prevent UIKit from applying the minimum margins altogether, set the viewRespectsSystemMinimumLayoutMargins property of your view controller to false.

The views actual margins are computed using the views configuration and the value of its directionalLayoutMargins property. A views margins are affected by the settings of its insetsLayoutMarginsFromSafeArea and preservesSuperviewLayoutMargins properties, which can increase the default margin values to ensure appropriate spacing of your content.

See Also

Constraints

Positioning content relative to the safe area

Position views so that they arent obstructed by other content.

class NSLayoutConstraint

The relationship between two user interface objects that must be satisfied by the constraint-based layout system.

protocol UILayoutSupport

A set of methods that provide layout support and access to layout anchors.


https://developer.apple.com/documentation/uikit/uiview/directionallayoutmargins

  • UIKit
  • UIView
  • directionalLayoutMargins

Instance Property

directionalLayoutMargins

The default spacing to use when laying out content in a view, taking into account the current language direction.

@MainActor var directionalLayoutMargins: NSDirectionalEdgeInsets { get set }

Mentioned in

Positioning content within layout margins

Discussion

Use this property to specify the desired amount of space (measured in points) between the edges of this view and its subviews. The leading and trailing margins are applied appropriately to the left or right margins based on the current layout direction. For example, the leading margin is applied to the right edge of the view in right-to-left layouts. For most views, the default layout margins are 8 points on each side. You can change these values as needed for your interface.

For the root view of a view controller, the default value of this property reflects the system minimum margins and safe area insets. For other subviews in your view hierarchy, the default layout margins are normally 8 points on each side, but the values may be greater if the view is not fully inside the safe area or if the preservesSuperviewLayoutMargins property is true.

Auto layout uses your margins as a cue for placing content. For example, if you specify a set of horizontal constraints using the format string “ |-[subview]-|”, the leading and trailing edges of the subview are inset from the edge of the superview by the corresponding layout margins. When the edge of your view is close to the edge of the superview and the preservesSuperviewLayoutMargins property is true, the actual layout margins may be increased to prevent content from overlapping the superviews margins.

See Also

Configuring content margins

Position views so that they arent crowded by other content.

var layoutMargins: UIEdgeInsets

The default spacing to use when laying out content in the view.

var preservesSuperviewLayoutMargins: Bool

A Boolean value indicating whether the current view also respects the margins of its superview.

func layoutMarginsDidChange()

Notifies the view that the layout margins changed.


https://developer.apple.com/documentation/uikit/uiview/layoutmargins

  • UIKit
  • UIView
  • layoutMargins

Instance Property

layoutMargins

The default spacing to use when laying out content in the view.

tvOS

@MainActor var layoutMargins: UIEdgeInsets { get set }

Discussion

In iOS 11 and later, use the directionalLayoutMargins property to specify layout margins instead of this property. The leading and trailing edge insets in the directionalLayoutMargins property are synchronized with the left and right insets in this property. For example, setting the leading directional edge inset to 20 points causes the left inset of this property to be set to 20 points on a system with a left-to-right language.

For the root view of a view controller, the default value of this property reflects the system minimum margins and safe area insets. For other subviews in your view hierarchy, the default layout margins are normally 8 points on each side, but the values may be greater if the view is not fully inside the safe area or if the preservesSuperviewLayoutMargins property is true.

This property specifies the desired amount of space (measured in points) between the edge of the view and any subviews. Auto layout uses your margins as a cue for placing content. For example, if you specify a set of horizontal constraints using the format string “ |-[subview]-|”, the left and right edges of the subview are inset from the edge of the superview by the corresponding layout margins. When the edge of your view is close to the edge of the superview and the preservesSuperviewLayoutMargins property is true, the actual layout margins may be increased to prevent content from overlapping the superviews margins.

See Also

Configuring content margins

Positioning content within layout margins

Position views so that they arent crowded by other content.

var directionalLayoutMargins: NSDirectionalEdgeInsets

The default spacing to use when laying out content in a view, taking into account the current language direction.

var preservesSuperviewLayoutMargins: Bool

A Boolean value indicating whether the current view also respects the margins of its superview.

func layoutMarginsDidChange()

Notifies the view that the layout margins changed.


https://developer.apple.com/documentation/uikit/uiview/preservessuperviewlayoutmargins

  • UIKit
  • UIView
  • preservesSuperviewLayoutMargins

Instance Property

preservesSuperviewLayoutMargins

A Boolean value indicating whether the current view also respects the margins of its superview.

tvOS

@MainActor var preservesSuperviewLayoutMargins: Bool { get set }

Mentioned in

Positioning content within layout margins

Discussion

When the value of this property is true, the superviews margins are also considered when laying out content. This margin affects layouts where the distance between the edge of a view and its superview is smaller than the corresponding margin. For example, you might have a content view whose frame precisely matches the bounds of its superview. When any of the superviews margins is inside the area represented by the content view and its own margins, UIKit adjusts the content views layout to respect the superviews margins. The amount of the adjustment is the smallest amount needed to ensure that content is also inside the superviews margins.

The default value of this property is false.

See Also

Configuring content margins

Position views so that they arent crowded by other content.

var directionalLayoutMargins: NSDirectionalEdgeInsets

The default spacing to use when laying out content in a view, taking into account the current language direction.

var layoutMargins: UIEdgeInsets

The default spacing to use when laying out content in the view.

func layoutMarginsDidChange()

Notifies the view that the layout margins changed.


https://developer.apple.com/documentation/uikit/uiview/layoutmarginsdidchange()

#app-main)

  • UIKit
  • UIView
  • layoutMarginsDidChange()

Instance Method

layoutMarginsDidChange()

Notifies the view that the layout margins changed.

tvOS

@MainActor func layoutMarginsDidChange()

Discussion

The default implementation of this method does nothing. Subclasses can override this method and use it to respond when the value in the views layoutMargins property changes. For example, you might override this method if your view subclass handles layout manually or uses the layout margins during drawing. In both cases, you could use this method to initiate a drawing or layout update.

See Also

Configuring content margins

Positioning content within layout margins

Position views so that they arent crowded by other content.

var directionalLayoutMargins: NSDirectionalEdgeInsets

The default spacing to use when laying out content in a view, taking into account the current language direction.

var layoutMargins: UIEdgeInsets

The default spacing to use when laying out content in the view.

var preservesSuperviewLayoutMargins: Bool

A Boolean value indicating whether the current view also respects the margins of its superview.


https://developer.apple.com/documentation/uikit/positioning-content-relative-to-the-safe-area


https://developer.apple.com/documentation/uikit/uiview/safeareainsets

  • UIKit
  • UIView
  • safeAreaInsets

Instance Property

safeAreaInsets

The insets that you use to determine the safe area for this view.

@MainActor var safeAreaInsets: UIEdgeInsets { get }

Mentioned in

Positioning content relative to the safe area

Discussion

The safe area of a view reflects the area not covered by navigation bars, tab bars, toolbars, and other ancestors that obscure a view controllers view. (In tvOS, the safe area reflects the area not covered by the screens bezel.) You obtain the safe area for a view by applying the insets in this property to the views bounds rectangle. If the view is not currently installed in a view hierarchy, or is not yet visible onscreen, the edge insets in this property are 0.

For the view controllers root view, the insets account for the status bar, other visible bars, and any additional insets that you specified using the additionalSafeAreaInsets property of your view controller. For other views in the view hierarchy, the insets reflect only the portion of the view that is covered. For example, if a view is entirely within the safe area of its superview, the edge insets in this property are 0.

You might use this property at runtime to adjust the position of your views content programmatically.

See Also

var overscanCompensationInsets: UIEdgeInsets

The edge inset values needed to avoid clipping the rectangle.

Getting the safe area

Position views so that they arent obstructed by other content.

var safeAreaLayoutGuide: UILayoutGuide

The layout guide representing the portion of your view that is unobscured by bars and other content.

func safeAreaInsetsDidChange()

Called when the safe area of the view changes.

var insetsLayoutMarginsFromSafeArea: Bool

A Boolean value indicating whether the views layout margins are updated automatically to reflect the safe area.


https://developer.apple.com/documentation/uikit/uiview/safearealayoutguide

  • UIKit
  • UIView
  • safeAreaLayoutGuide

Instance Property

safeAreaLayoutGuide

The layout guide representing the portion of your view that is unobscured by bars and other content.

@MainActor var safeAreaLayoutGuide: UILayoutGuide { get }

Mentioned in

Positioning content relative to the safe area

Discussion

When the view is visible onscreen, this guide reflects the portion of the view that is not covered by navigation bars, tab bars, toolbars, and other ancestor views. (In tvOS, the safe area reflects the area not covered the screens bezel.) If the view is not currently installed in a view hierarchy, or is not yet visible onscreen, the layout guide edges are equal to the edges of the view.

For the view controllers root view, the layout guide accommodates the status bar, other visible bars, and any additional insets that you specified using the additionalSafeAreaInsets property of your view controller. For other views in the view hierarchy, the layout guide reflects only the portion of the view that is covered by other content. For example, if a view is entirely within the safe area of its superview, the layout guide edges are equal to the edges of the view.

See Also

Getting the safe area

Position views so that they arent obstructed by other content.

var safeAreaInsets: UIEdgeInsets

The insets that you use to determine the safe area for this view.

func safeAreaInsetsDidChange()

Called when the safe area of the view changes.

var insetsLayoutMarginsFromSafeArea: Bool

A Boolean value indicating whether the views layout margins are updated automatically to reflect the safe area.


https://developer.apple.com/documentation/uikit/uiview/safeareainsetsdidchange()

#app-main)

  • UIKit
  • UIView
  • safeAreaInsetsDidChange()

Instance Method

safeAreaInsetsDidChange()

Called when the safe area of the view changes.

@MainActor func safeAreaInsetsDidChange()

See Also

Getting the safe area

Positioning content relative to the safe area

Position views so that they arent obstructed by other content.

var safeAreaInsets: UIEdgeInsets

The insets that you use to determine the safe area for this view.

var safeAreaLayoutGuide: UILayoutGuide

The layout guide representing the portion of your view that is unobscured by bars and other content.

var insetsLayoutMarginsFromSafeArea: Bool

A Boolean value indicating whether the views layout margins are updated automatically to reflect the safe area.


https://developer.apple.com/documentation/uikit/uiview/insetslayoutmarginsfromsafearea

  • UIKit
  • UIView
  • insetsLayoutMarginsFromSafeArea

Instance Property

insetsLayoutMarginsFromSafeArea

A Boolean value indicating whether the views layout margins are updated automatically to reflect the safe area.

@MainActor var insetsLayoutMarginsFromSafeArea: Bool { get set }

Mentioned in

Positioning content within layout margins

Discussion

When the value of this property is true, any margins that are outside the safe area are automatically modified to fall within the safe area boundary. The default value of this property is true. Changing the value to false allows your margins to remain at their original locations, even when they are outside the safe area.

See Also

Getting the safe area

Positioning content relative to the safe area

Position views so that they arent obstructed by other content.

var safeAreaInsets: UIEdgeInsets

The insets that you use to determine the safe area for this view.

var safeAreaLayoutGuide: UILayoutGuide

The layout guide representing the portion of your view that is unobscured by bars and other content.

func safeAreaInsetsDidChange()

Called when the safe area of the view changes.


https://developer.apple.com/documentation/uikit/uiview/removeconstraint(_:)

#app-main)

  • UIKit
  • UIView
  • removeConstraint(_:)

Instance Method

removeConstraint(_:)

Removes the specified constraint from the view.

tvOS

@MainActor func removeConstraint(_ constraint: NSLayoutConstraint)

Parameters

constraint

The constraint to remove. Removing a constraint not held by the view has no effect.

Discussion

When developing for iOS 8.0 or later, set the constraints isActive property to false instead of calling the removeConstraint(_:) method directly. The isActive property automatically adds and removes the constraint from the correct view.

See Also

Managing the views constraints

var constraints: [NSLayoutConstraint]

The constraints held by the view.

func addConstraint(NSLayoutConstraint)

Adds a constraint on the layout of the receiving view or its subviews.

func addConstraints([NSLayoutConstraint])

Adds multiple constraints on the layout of the receiving view or its subviews.

func removeConstraints([NSLayoutConstraint])

Removes the specified constraints from the view.


https://developer.apple.com/documentation/uikit/uiview/bottomanchor

  • UIKit
  • UIView
  • bottomAnchor

Instance Property

bottomAnchor

A layout anchor representing the bottom edge of the views frame.

@MainActor var bottomAnchor: NSLayoutYAxisAnchor { get }

Discussion

Use this anchor to create constraints with the views bottom edge. You can combine this anchor only with other NSLayoutYAxisAnchor anchors. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/centerxanchor

  • UIKit
  • UIView
  • centerXAnchor

Instance Property

centerXAnchor

A layout anchor representing the horizontal center of the views frame.

@MainActor var centerXAnchor: NSLayoutXAxisAnchor { get }

Discussion

Use this anchor to create constraints with the views horizontal center. You can combine this anchor only with other NSLayoutXAxisAnchor anchors. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/centeryanchor


https://developer.apple.com/documentation/uikit/uiview/firstbaselineanchor

  • UIKit
  • UIView
  • firstBaselineAnchor

Instance Property

firstBaselineAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

@MainActor var firstBaselineAnchor: NSLayoutYAxisAnchor { get }

Mentioned in

Configuring and displaying symbol images in your UI

Discussion

For views with multiple lines of text, this anchor represents the baseline of the top row of text. Use this anchor to create constraints with this baseline. You can combine this anchor only with other NSLayoutYAxisAnchor anchors. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/heightanchor

  • UIKit
  • UIView
  • heightAnchor

Instance Property

heightAnchor

A layout anchor representing the height of the views frame.

@MainActor var heightAnchor: NSLayoutDimension { get }

Discussion

Use this anchor to create constraints with the views height. You can combine this anchor only with other NSLayoutDimension anchors. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/lastbaselineanchor

  • UIKit
  • UIView
  • lastBaselineAnchor

Instance Property

lastBaselineAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

@MainActor var lastBaselineAnchor: NSLayoutYAxisAnchor { get }

Discussion

For views with multiple lines of text, this anchor represents the baseline of the bottom row of text. Use this anchor to create constraints with this baseline. You can combine this anchor only with other NSLayoutYAxisAnchor anchors. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/leadinganchor


https://developer.apple.com/documentation/uikit/uiview/leftanchor


https://developer.apple.com/documentation/uikit/uiview/rightanchor

  • UIKit
  • UIView
  • rightAnchor

Instance Property

rightAnchor

A layout anchor representing the right edge of the views frame.

@MainActor var rightAnchor: NSLayoutXAxisAnchor { get }

Discussion

Use this anchor to create constraints with the views right edge. You can combine this anchor only with a subset of the NSLayoutXAxisAnchor anchors. You can combine a UIView with another rightAnchor, a leftAnchor, or a centerXAnchor. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var trailingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the trailing edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/topanchor


https://developer.apple.com/documentation/uikit/uiview/trailinganchor

  • UIKit
  • UIView
  • trailingAnchor

Instance Property

trailingAnchor

A layout anchor representing the trailing edge of the views frame.

@MainActor var trailingAnchor: NSLayoutXAxisAnchor { get }

Discussion

Use this anchor to create constraints with the views trailing edge. You can combine this anchor only with a subset of the NSLayoutXAxisAnchor anchors. You can combine a UIView with another trailingAnchor, a leadingAnchor, or a centerXAnchor. For more information, see NSLayoutAnchor.

See Also

Creating constraints using layout anchors

var bottomAnchor: NSLayoutYAxisAnchor

A layout anchor representing the bottom edge of the views frame.

var centerXAnchor: NSLayoutXAxisAnchor

A layout anchor representing the horizontal center of the views frame.

var centerYAnchor: NSLayoutYAxisAnchor

A layout anchor representing the vertical center of the views frame.

var firstBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the topmost line of text in the view.

var heightAnchor: NSLayoutDimension

A layout anchor representing the height of the views frame.

var lastBaselineAnchor: NSLayoutYAxisAnchor

A layout anchor representing the baseline for the bottommost line of text in the view.

var leadingAnchor: NSLayoutXAxisAnchor

A layout anchor representing the leading edge of the views frame.

var leftAnchor: NSLayoutXAxisAnchor

A layout anchor representing the left edge of the views frame.

var rightAnchor: NSLayoutXAxisAnchor

A layout anchor representing the right edge of the views frame.

var topAnchor: NSLayoutYAxisAnchor

A layout anchor representing the top edge of the views frame.

var widthAnchor: NSLayoutDimension

A layout anchor representing the width of the views frame.


https://developer.apple.com/documentation/uikit/uiview/widthanchor


https://developer.apple.com/documentation/uikit/uiview/addlayoutguide(_:)

#app-main)

  • UIKit
  • UIView
  • addLayoutGuide(_:)

Instance Method

addLayoutGuide(_:)

Adds the specified layout guide to the view.

@MainActor func addLayoutGuide(_ layoutGuide: UILayoutGuide)

Parameters

layoutGuide

The layout guide to be added.

Discussion

This method adds the specified layout guide to the end of the views layoutGuides array. It also assigns the view to the guides owningView property. Each guide can have only one owning view.

After the guide has been added to a view, it can participate in Auto Layout constraints with that views hierarchy.

See Also

Working with layout guides

var layoutGuides: [UILayoutGuide]

The array of layout guide objects owned by this view.

var layoutMarginsGuide: UILayoutGuide

A layout guide representing the views margins.

var readableContentGuide: UILayoutGuide

A layout guide representing an area with a readable width within the view.

func removeLayoutGuide(UILayoutGuide)

Removes the specified layout guide from the view.


https://developer.apple.com/documentation/uikit/uiview/layoutmarginsguide


https://developer.apple.com/documentation/uikit/uiview/readablecontentguide

  • UIKit
  • UIView
  • readableContentGuide

Instance Property

readableContentGuide

A layout guide representing an area with a readable width within the view.

@MainActor var readableContentGuide: UILayoutGuide { get }

Discussion

This layout guide defines an area that can easily be read without forcing users to move their head to track the lines. The readable content area follows the following rules:

  1. The readable content guide never extends beyond the views layout margin guide.

  2. The readable content guide is vertically centered inside the layout margin guide.

  3. The readable content guides width is equal to or less than the readable width defined for the current dynamic text size.

Use the readable content guide to lay out a single column of text. If you are laying out multiple columns, you can use the guides width to determine the optimal width for your columns.

See Also

Working with layout guides

func addLayoutGuide(UILayoutGuide)

Adds the specified layout guide to the view.

var layoutGuides: [UILayoutGuide]

The array of layout guide objects owned by this view.

var layoutMarginsGuide: UILayoutGuide

A layout guide representing the views margins.

func removeLayoutGuide(UILayoutGuide)

Removes the specified layout guide from the view.


https://developer.apple.com/documentation/uikit/uiview/removelayoutguide(_:)


https://developer.apple.com/documentation/uikit/uiview/systemlayoutsizefitting(_:)


https://developer.apple.com/documentation/uikit/uiview/systemlayoutsizefitting(_:withhorizontalfittingpriority:verticalfittingpriority:)

#app-main)

  • UIKit
  • UIView
  • systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:)

Instance Method

systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:)

Returns the optimal size of the view based on its constraints and the specified fitting priorities.

tvOS

@MainActor func systemLayoutSizeFitting( _ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority

Parameters

targetSize

The size that you prefer for the view. To obtain a view that is as small as possible, specify the constant layoutFittingCompressedSize. To obtain a view that is as large as possible, specify the constant layoutFittingExpandedSize.

horizontalFittingPriority

The priority for horizontal constraints. Specify fittingSizeLevel to get a width that is as close as possible to the width value of targetSize.

verticalFittingPriority

The priority for vertical constraints. Specify fittingSizeLevel to get a height that is as close as possible to the height value of targetSize.

Return Value

The optimal size for the view based on the provided constraint priorities.

Discussion

Use this method when you want to prioritize the views constraints when determining the best possible size of the view. This method does not actually change the size of the view.

See Also

Measuring in Auto Layout

Returns the optimal size of the view based on its current constraints.

var intrinsicContentSize: CGSize

The natural size for the receiving view, considering only properties of the view itself.

func invalidateIntrinsicContentSize()

Invalidates the views intrinsic content size.

Returns the priority with which a view resists being made smaller than its intrinsic size.

func setContentCompressionResistancePriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made smaller than its intrinsic size.

Returns the priority with which a view resists being made larger than its intrinsic size.

func setContentHuggingPriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made larger than its intrinsic size.


https://developer.apple.com/documentation/uikit/uiview/intrinsiccontentsize


https://developer.apple.com/documentation/uikit/uiview/invalidateintrinsiccontentsize()

#app-main)

  • UIKit
  • UIView
  • invalidateIntrinsicContentSize()

Instance Method

invalidateIntrinsicContentSize()

Invalidates the views intrinsic content size.

tvOS

@MainActor func invalidateIntrinsicContentSize()

Discussion

Call this when something changes in your custom view that invalidates its intrinsic content size. This allows the constraint-based layout system to take the new intrinsic content size into account in its next layout pass.

See Also

Measuring in Auto Layout

Returns the optimal size of the view based on its current constraints.

Returns the optimal size of the view based on its constraints and the specified fitting priorities.

var intrinsicContentSize: CGSize

The natural size for the receiving view, considering only properties of the view itself.

Returns the priority with which a view resists being made smaller than its intrinsic size.

func setContentCompressionResistancePriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made smaller than its intrinsic size.

Returns the priority with which a view resists being made larger than its intrinsic size.

func setContentHuggingPriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made larger than its intrinsic size.


https://developer.apple.com/documentation/uikit/uiview/contentcompressionresistancepriority(for:)


https://developer.apple.com/documentation/uikit/uiview/setcontentcompressionresistancepriority(_:for:)

#app-main)

  • UIKit
  • UIView
  • setContentCompressionResistancePriority(_:for:)

Instance Method

setContentCompressionResistancePriority(_:for:)

Sets the priority with which a view resists being made smaller than its intrinsic size.

tvOS

@MainActor func setContentCompressionResistancePriority( _ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis )

Parameters

priority

The new priority.

axis

The axis for which the compression resistance priority should be set.

Discussion

Custom views should set default values for both orientations on creation, based on their content, typically to UILayoutPriorityDefaultLow or UILayoutPriorityDefaultHigh. When creating user interfaces, the layout designer can modify these priorities for specific views when the overall layout design requires different tradeoffs than the natural priorities of the views being used in the interface.

Subclasses should not override this method.

See Also

Measuring in Auto Layout

Returns the optimal size of the view based on its current constraints.

Returns the optimal size of the view based on its constraints and the specified fitting priorities.

var intrinsicContentSize: CGSize

The natural size for the receiving view, considering only properties of the view itself.

func invalidateIntrinsicContentSize()

Invalidates the views intrinsic content size.

Returns the priority with which a view resists being made smaller than its intrinsic size.

Returns the priority with which a view resists being made larger than its intrinsic size.

func setContentHuggingPriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made larger than its intrinsic size.


https://developer.apple.com/documentation/uikit/uiview/contenthuggingpriority(for:)

#app-main)

  • UIKit
  • UIView
  • contentHuggingPriority(for:)

Instance Method

contentHuggingPriority(for:)

Returns the priority with which a view resists being made larger than its intrinsic size.

tvOS

@MainActor

Parameters

axis

The axis of the view that might be enlarged.

Return Value

The priority with which the view should resist being enlarged from its intrinsic size on the specified axis.

Discussion

The constraint-based layout system uses these priorities when determining the best layout for views that are encountering constraints that would require them to be larger than their intrinsic size.

See Also

Measuring in Auto Layout

Returns the optimal size of the view based on its current constraints.

Returns the optimal size of the view based on its constraints and the specified fitting priorities.

var intrinsicContentSize: CGSize

The natural size for the receiving view, considering only properties of the view itself.

func invalidateIntrinsicContentSize()

Invalidates the views intrinsic content size.

Returns the priority with which a view resists being made smaller than its intrinsic size.

func setContentCompressionResistancePriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made smaller than its intrinsic size.

func setContentHuggingPriority(UILayoutPriority, for: NSLayoutConstraint.Axis)

Sets the priority with which a view resists being made larger than its intrinsic size.


https://developer.apple.com/documentation/uikit/uiview/setcontenthuggingpriority(_:for:)


https://developer.apple.com/documentation/uikit/uiview/alignmentrectinsets

  • UIKit
  • UIView
  • alignmentRectInsets

Instance Property

alignmentRectInsets

The insets from the views frame that define its alignment rectangle.

tvOS

@MainActor var alignmentRectInsets: UIEdgeInsets { get }

Discussion

The default value of this property is an UIEdgeInsets structure with zero values. Custom views that draw ornamentation around their content should use this property to return insets that align with the edges of the content, excluding the ornamentation. This allows the constraint-based layout system to align views based on their content, rather than just their frame.

Custom views whose content location cant be expressed by a simple set of insets should override alignmentRect(forFrame:) and frame(forAlignmentRect:) to describe their custom transform between alignment rectangle and frame.

See Also

Aligning views in Auto Layout

Returns the views alignment rectangle for a given frame.

Returns the views frame for a given alignment rectangle.

var forFirstBaselineLayout: UIView

Returns a view used to satisfy first baseline constraints.

var forLastBaselineLayout: UIView

Returns a view used to satisfy last baseline constraints.


https://developer.apple.com/documentation/uikit/uiview/forfirstbaselinelayout

  • UIKit
  • UIView
  • forFirstBaselineLayout

Instance Property

forFirstBaselineLayout

Returns a view used to satisfy first baseline constraints.

@MainActor var forFirstBaselineLayout: UIView { get }

Discussion

For views with multiple rows of text, the first baseline is the baseline for the topmost row.

When you make a constraint to a views NSLayoutConstraint.Attribute.firstBaseline attribute, Auto Layout uses the baseline of the view returned by this method. If that view does not have a baseline, Auto Layout uses the views top edge.

Override this property to return a text-based subview (for example, UILabel or a nonscrolling UITextView). The returned view must be a subview of the receiver. The default implementation returns the value contained by forLastBaselineLayout.

See Also

Aligning views in Auto Layout

Returns the views alignment rectangle for a given frame.

Returns the views frame for a given alignment rectangle.

var alignmentRectInsets: UIEdgeInsets

The insets from the views frame that define its alignment rectangle.

var forLastBaselineLayout: UIView

Returns a view used to satisfy last baseline constraints.


https://developer.apple.com/documentation/uikit/uiview/forlastbaselinelayout

  • UIKit
  • UIView
  • forLastBaselineLayout

Instance Property

forLastBaselineLayout

Returns a view used to satisfy last baseline constraints.

@MainActor var forLastBaselineLayout: UIView { get }

Discussion

For views with multiple rows of text, the last baseline is the baseline for the bottommost row.

When you make a constraint to a views NSLayoutConstraint.Attribute.lastBaseline attribute, Auto Layout uses the baseline of the view returned by this method. If that view does not have a baseline, Auto Layout uses the views bottom edge.

Override this property to return a text-based subview (for example, UILabel or a nonscrolling UITextView). The returned view must be a subview of the receiver. The default implementation returns the receiving view.

See Also

Aligning views in Auto Layout

Returns the views alignment rectangle for a given frame.

Returns the views frame for a given alignment rectangle.

var alignmentRectInsets: UIEdgeInsets

The insets from the views frame that define its alignment rectangle.

var forFirstBaselineLayout: UIView

Returns a view used to satisfy first baseline constraints.


https://developer.apple.com/documentation/uikit/uiview/needsupdateconstraints()


https://developer.apple.com/documentation/uikit/uiview/setneedsupdateconstraints()

#app-main)

  • UIKit
  • UIView
  • setNeedsUpdateConstraints()

Instance Method

setNeedsUpdateConstraints()

Controls whether the views constraints need updating.

tvOS

@MainActor func setNeedsUpdateConstraints()

Discussion

When a property of your custom view changes in a way that would impact constraints, you can call this method to indicate that the constraints need to be updated at some point in the future. The system will then call updateConstraints() as part of its normal layout pass. Use this as an optimization tool to batch constraint changes. Updating constraints all at once just before they are needed ensures that you dont needlessly recalculate constraints when multiple changes are made to your view in between layout passes.

See Also

Triggering Auto Layout

A Boolean value that determines whether the views constraints need updating.

func updateConstraints()

Updates constraints for the view.

func updateConstraintsIfNeeded()

Updates the constraints for the receiving view and its subviews.


https://developer.apple.com/documentation/uikit/uiview/updateconstraintsifneeded()

#app-main)

  • UIKit
  • UIView
  • updateConstraintsIfNeeded()

Instance Method

updateConstraintsIfNeeded()

Updates the constraints for the receiving view and its subviews.

tvOS

@MainActor func updateConstraintsIfNeeded()

Discussion

Whenever a new layout pass is triggered for a view, the system invokes this method to ensure that any constraints for the view and its subviews are updated with information from the current view hierarchy and its constraints. This method is called automatically by the system, but may be invoked manually if you need to examine the most up to date constraints.

Subclasses should not override this method.

See Also

Triggering Auto Layout

A Boolean value that determines whether the views constraints need updating.

func setNeedsUpdateConstraints()

Controls whether the views constraints need updating.

func updateConstraints()

Updates constraints for the view.


https://developer.apple.com/documentation/uikit/uiview/hasambiguouslayout

  • UIKit
  • UIView
  • hasAmbiguousLayout

Instance Property

hasAmbiguousLayout

A Boolean value that determines whether the constraints impacting the layout of the view incompletely specify the location of the view.

tvOS

@MainActor var hasAmbiguousLayout: Bool { get }

Discussion

The value of this property is true if the views location is incompletely specified, false otherwise.

If there arent enough constraints in the system to uniquely determine layout, the layout is considered ambiguous. For example, if the only constraint in the system is x = y + 100, the layout is ambiguous because there are many possible values for x and y. UIKit does not automatically detect every ambiguous layout, so you may need to look for symptoms of ambiguity, such as views that jump from place to place, or that are in the wrong place.

This property should only be used for debugging constraint-based layout. No app should ship with usage of this property as part of its operation.

See Also

Debugging Auto Layout

Returns the constraints impacting the layout of the view for a given axis.

func exerciseAmbiguityInLayout()

Randomly changes the frame of a view with an ambiguous layout between the different valid values.


https://developer.apple.com/documentation/uikit/uiview/exerciseambiguityinlayout()

#app-main)

  • UIKit
  • UIView
  • exerciseAmbiguityInLayout()

Instance Method

exerciseAmbiguityInLayout()

Randomly changes the frame of a view with an ambiguous layout between the different valid values.

tvOS

@MainActor func exerciseAmbiguityInLayout()

Discussion

This method randomly changes the frame of a view with an ambiguous layout between its different valid values, causing the view to move in the interface. This makes it easy to visually identify what the valid frames are and may enable the developer to discern what constraints need to be added to the layout to fully specify a location for the view.

This method should only be used for debugging constraint-based layout. No application should ship with calls to this method as part of its operation.

See Also

Debugging Auto Layout

Returns the constraints impacting the layout of the view for a given axis.

var hasAmbiguousLayout: Bool

A Boolean value that determines whether the constraints impacting the layout of the view incompletely specify the location of the view.


https://developer.apple.com/documentation/uikit/uiview/contentmode-swift.enum

  • UIKit
  • UIView
  • UIView.ContentMode

Enumeration

UIView.ContentMode

Options to specify how a view adjusts its content when its size changes.

iOSiPadOSMac CatalysttvOSvisionOS

enum ContentMode

Topics

Constants

case scaleToFill

The option to scale the content to fit the size of itself by changing the aspect ratio of the content if necessary.

case scaleAspectFit

The option to scale the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the views bounds is transparent.

case scaleAspectFill

The option to scale the content to fill the size of the view. Some portion of the content may be clipped to fill the views bounds.

case redraw

The option to redisplay the view when the bounds change by invoking the setNeedsDisplay() method.

case center

The option to center the content in the views bounds, keeping the proportions the same.

case top

The option to center the content aligned at the top in the views bounds.

case bottom

The option to center the content aligned at the bottom in the views bounds.

case left

The option to align the content on the left of the view.

case right

The option to align the content on the right of the view.

case topLeft

The option to align the content in the top-left corner of the view.

case topRight

The option to align the content in the top-right corner of the view.

case bottomLeft

The option to align the content in the bottom-left corner of the view.

case bottomRight

The option to align the content in the bottom-right corner of the view.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Configuring the resizing behavior

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

Asks the view to calculate and return the size that best fits the specified size.

func sizeToFit()

Resizes and moves the receiver view so it just encloses its subviews.

var autoresizesSubviews: Bool

A Boolean value that determines whether the receiver automatically resizes its subviews when its bounds change.

var autoresizingMask: UIView.AutoresizingMask

An integer bit mask that determines how the receiver resizes itself when its superviews bounds change.


https://developer.apple.com/documentation/uikit/uiview/sizethatfits(_:)


https://developer.apple.com/documentation/uikit/uiview/sizetofit()


https://developer.apple.com/documentation/uikit/uiview/autoresizessubviews

  • UIKit
  • UIView
  • autoresizesSubviews

Instance Property

autoresizesSubviews

A Boolean value that determines whether the receiver automatically resizes its subviews when its bounds change.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor var autoresizesSubviews: Bool { get set }

Discussion

When set to true, the receiver adjusts the size of its subviews when its bounds change. The default value is true.

See Also

Configuring the resizing behavior

var contentMode: UIView.ContentMode

A flag used to determine how a view lays out its content when its bounds change.

enum ContentMode

Options to specify how a view adjusts its content when its size changes.

Asks the view to calculate and return the size that best fits the specified size.

func sizeToFit()

Resizes and moves the receiver view so it just encloses its subviews.

var autoresizingMask: UIView.AutoresizingMask

An integer bit mask that determines how the receiver resizes itself when its superviews bounds change.


https://developer.apple.com/documentation/uikit/uiview/layoutsubviews()

#app-main)

  • UIKit
  • UIView
  • layoutSubviews()

Instance Method

layoutSubviews()

Lays out subviews.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func layoutSubviews()

Discussion

The default implementation of this method does nothing on iOS 5.1 and earlier. Otherwise, the default implementation uses any constraints youve set to determine the size and position of any subviews.

Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews dont offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.

You shouldnt call this method directly. If you want to force a layout update, call the setNeedsLayout() method instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call the layoutIfNeeded() method.

In iOS 18 and later, UIKit supports automatic trait tracking inside this method for traits from this views traitCollection. For more information, see Automatic trait tracking.

See Also

Views

func updateProperties()

Override point for subclasses to update properties of this view. Never call this method directly; use setNeedsUpdateProperties to schedule an update.

Beta

func setNeedsUpdateProperties()

Call to manually request a properties update for the view. Multiple requests may be coalesced into a single update alongside the next layout pass.

func updatePropertiesIfNeeded()

Forces an immediate properties update for this view (and its view controller, if applicable) and any subviews, including any view controllers or views in its subtree.

func updateConstraints()

Updates constraints for the view.

func draw(CGRect)

Draws the views image within the passed-in rectangle.

struct Properties


https://developer.apple.com/documentation/uikit/uiview/setneedslayout()


https://developer.apple.com/documentation/uikit/uiview/layoutifneeded()

#app-main)

  • UIKit
  • UIView
  • layoutIfNeeded()

Instance Method

layoutIfNeeded()

Lays out the subviews immediately, if layout updates are pending.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func layoutIfNeeded()

Discussion

Use this method to force the view to update its layout immediately. When using Auto Layout, the layout engine updates the position of views as needed to satisfy changes in constraints. Using the view that receives the message as the root view, this method lays out the view subtree starting at the root. If no layout updates are pending, this method exits without modifying the layout or calling any layout-related callbacks.

See Also

Laying out subviews

func layoutSubviews()

Lays out subviews.

func setNeedsLayout()

Invalidates the current layout of the receiver and triggers a layout update during the next update cycle.

class var requiresConstraintBasedLayout: Bool

A Boolean value that indicates whether the receiver depends on the constraint-based layout system.

var translatesAutoresizingMaskIntoConstraints: Bool

A Boolean value that determines whether the views autoresizing mask is translated into Auto Layout constraints.


https://developer.apple.com/documentation/uikit/uiview/translatesautoresizingmaskintoconstraints

  • UIKit
  • UIView
  • translatesAutoresizingMaskIntoConstraints

Instance Property

translatesAutoresizingMaskIntoConstraints

A Boolean value that determines whether the views autoresizing mask is translated into Auto Layout constraints.

tvOS

@MainActor var translatesAutoresizingMaskIntoConstraints: Bool { get set }

Discussion

If this propertys value is true, the system creates a set of constraints that duplicate the behavior specified by the views autoresizing mask. This also lets you modify the views size and location using the views frame, bounds, or center properties, allowing you to create a static, frame-based layout within Auto Layout.

Note that the autoresizing mask constraints fully specify the views size and position; therefore, you cannot add additional constraints to modify this size or position without introducing conflicts. If you want to use Auto Layout to dynamically calculate the size and position of your view, you must set this property to false, and then provide a non ambiguous, nonconflicting set of constraints for the view.

By default, the property is set to true for any view you programmatically create. If you add views in Interface Builder, the system automatically sets this property to false.

See Also

Laying out subviews

func layoutSubviews()

Lays out subviews.

func setNeedsLayout()

Invalidates the current layout of the receiver and triggers a layout update during the next update cycle.

func layoutIfNeeded()

Lays out the subviews immediately, if layout updates are pending.

class var requiresConstraintBasedLayout: Bool

A Boolean value that indicates whether the receiver depends on the constraint-based layout system.


https://developer.apple.com/documentation/uikit/uiview/layoutregion

  • UIKit
  • UIView
  • UIView.LayoutRegion

Structure

UIView.LayoutRegion

Mac Catalyst

struct LayoutRegion

Topics

Enumerations

enum AdaptivityAxis

Relationships

Conforms To

  • Equatable
  • Hashable

See Also

Accessing insets and layout guides

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiview/directionaledgeinsets(for:)

#app-main)

  • UIKit
  • UIView
  • directionalEdgeInsets(for:)

Instance Method

directionalEdgeInsets(for:)

Mac Catalyst

@MainActor @preconcurrency

See Also

Accessing insets and layout guides

struct LayoutRegion

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiview/edgeinsets(for:)

#app-main)

  • UIKit
  • UIView
  • edgeInsets(for:)

Instance Method

edgeInsets(for:)

Mac Catalyst

@MainActor @preconcurrency

See Also

Accessing insets and layout guides

struct LayoutRegion

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiview/layoutguide(for:)

#app-main)

  • UIKit
  • UIView
  • layoutGuide(for:)

Instance Method

layoutGuide(for:)

Mac Catalyst

@MainActor @preconcurrency

See Also

Accessing insets and layout guides

struct LayoutRegion

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uiview/overrideuserinterfacestyle

  • UIKit
  • UIView
  • overrideUserInterfaceStyle

Instance Property

overrideUserInterfaceStyle

The user interface style adopted by the view and all of its subviews.

@MainActor var overrideUserInterfaceStyle: UIUserInterfaceStyle { get set }

Mentioned in

Choosing a specific interface style for your iOS app

Discussion

Use this property to force the view to always adopt a light or dark interface style. The default value of this property is UIUserInterfaceStyle.unspecified, which causes the view to inherit the interface style from a parent view or view controller. If you assign a different value, the new style applies to the view and all of the subviews owned by the same view controller. (If the view hierarchy contains the root view of an embedded child view controller, the child view controller and its views do not inherit the interface style.) If the view is a UIWindow object, the new style applies to everything in the window, including the root view controller and all presented content.

See Also

Adjusting the user interface

var semanticContentAttribute: UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.

var effectiveUserInterfaceLayoutDirection: UIUserInterfaceLayoutDirection

The user interface layout direction appropriate for arranging the immediate content of the view.

Returns the user interface direction for the given semantic content attribute.

Returns the layout direction implied by the specified semantic content attribute, relative to the specified layout direction.


https://developer.apple.com/documentation/uikit/uiview/semanticcontentattribute

  • UIKit
  • UIView
  • semanticContentAttribute

Instance Property

semanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.

@MainActor var semanticContentAttribute: UISemanticContentAttribute { get set }

Discussion

Some views should not flip when switching between left-to-right and right-to-left layouts. For example, the view is part of the playback controls or represents physical directions (up, down, left, right) that dont change. Instead of thinking about whether or not a view should change its orientation, select the semantic content attribute that best describes your view.

When creating a view that contains subviews, you can use the userInterfaceLayoutDirection(for:) class method to determine whether the subviews should be flipped, and lay out the views in the appropriate order.

For a list of possible values, see UISemanticContentAttribute.

See Also

Adjusting the user interface

var overrideUserInterfaceStyle: UIUserInterfaceStyle

The user interface style adopted by the view and all of its subviews.

var effectiveUserInterfaceLayoutDirection: UIUserInterfaceLayoutDirection

The user interface layout direction appropriate for arranging the immediate content of the view.

Returns the user interface direction for the given semantic content attribute.

Returns the layout direction implied by the specified semantic content attribute, relative to the specified layout direction.


https://developer.apple.com/documentation/uikit/uiview/effectiveuserinterfacelayoutdirection

  • UIKit
  • UIView
  • effectiveUserInterfaceLayoutDirection

Instance Property

effectiveUserInterfaceLayoutDirection

The user interface layout direction appropriate for arranging the immediate content of the view.

@MainActor var effectiveUserInterfaceLayoutDirection: UIUserInterfaceLayoutDirection { get }

Discussion

When a views immediate content is being arranged or drawn, you should always consult the value of this property. In addition, note that you cant assume that the value propagates through the views subtree.

See Also

Adjusting the user interface

var overrideUserInterfaceStyle: UIUserInterfaceStyle

The user interface style adopted by the view and all of its subviews.

var semanticContentAttribute: UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.

Returns the user interface direction for the given semantic content attribute.

Returns the layout direction implied by the specified semantic content attribute, relative to the specified layout direction.


https://developer.apple.com/documentation/uikit/uiview/userinterfacelayoutdirection(for:)


https://developer.apple.com/documentation/uikit/uiview/userinterfacelayoutdirection(for:relativeto:)

#app-main)

  • UIKit
  • UIView
  • userInterfaceLayoutDirection(for:relativeTo:)

Type Method

userInterfaceLayoutDirection(for:relativeTo:)

Returns the layout direction implied by the specified semantic content attribute, relative to the specified layout direction.

@MainActor class func userInterfaceLayoutDirection( for semanticContentAttribute: UISemanticContentAttribute, relativeTo layoutDirection: UIUserInterfaceLayoutDirection

Parameters

semanticContentAttribute

The semantic content attribute for a view.

layoutDirection

The user interface layout direction ( UIUserInterfaceLayoutDirection.leftToRight or UIUserInterfaceLayoutDirection.rightToLeft).

Return Value

The layout direction implied by the semantic content attribute and relative to the layout direction.

Discussion

For example, when this method is passed a layout direction of UIUserInterfaceLayoutDirection.rightToLeft and a semantic content attribute of UISemanticContentAttribute.playback, it returns UIUserInterfaceLayoutDirection.leftToRight. Although layout and drawing code can use this method to determine how to arrange elements, it might be easier to query the container views effectiveUserInterfaceLayoutDirection property instead.

See Also

Adjusting the user interface

var overrideUserInterfaceStyle: UIUserInterfaceStyle

The user interface style adopted by the view and all of its subviews.

var semanticContentAttribute: UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.

var effectiveUserInterfaceLayoutDirection: UIUserInterfaceLayoutDirection

The user interface layout direction appropriate for arranging the immediate content of the view.

Returns the user interface direction for the given semantic content attribute.


https://developer.apple.com/documentation/uikit/uiview/keyboardlayoutguide

  • UIKit
  • UIView
  • keyboardLayoutGuide

Instance Property

keyboardLayoutGuide

A layout guide that tracks the keyboards position in your apps layout.

@MainActor var keyboardLayoutGuide: UIKeyboardLayoutGuide { get }

See Also

Handling keyboard layout

class UIKeyboardLayoutGuide

A layout guide that represents the space the keyboard occupies in your apps layout.

class UITrackingLayoutGuide

A layout guide that automatically activates and deactivates layout constraints depending on its proximity to edges.


https://developer.apple.com/documentation/uikit/uiview/addinteraction(_:)

#app-main)

  • UIKit
  • UIView
  • addInteraction(_:)

Instance Method

addInteraction(_:)

Adds an interaction to the view.

@MainActor func addInteraction(_ interaction: any UIInteraction)

Parameters

interaction

The interaction object to add to the view.

See Also

Adding and removing interactions

func removeInteraction(any UIInteraction)

Removes an interaction from the view.

var interactions: [any UIInteraction]

The array of interactions for the view.

protocol UIInteraction

The protocol that an interaction implements to access the view that owns it.


https://developer.apple.com/documentation/uikit/uiview/removeinteraction(_:)


https://developer.apple.com/documentation/uikit/uiinteraction


https://developer.apple.com/documentation/uikit/uiview/contentscalefactor


https://developer.apple.com/documentation/uikit/uiview/tintcolordidchange()


https://developer.apple.com/documentation/uikit/uiview/invalidating

  • UIKit
  • UIView
  • UIView.Invalidating

Structure

UIView.Invalidating

A property wrapper that notifies the system that a property value change has invalidated an aspect of the containing view.

Mac CatalystvisionOSSwift 5.1+

@propertyWrapper

Overview

Use this wrapper when a change in the property value invalidates the display, layout, configuration, constraints, or intrinsic sizing of a view. This wrapper performs any actions necessary to notify the system that your view is invalid and requires an update. The actions depend on the invalidation types you specify. For more information on available invalidation types, see UIViewInvalidating.

The following example uses the UIView.Invalidating wrapper with the display type on the property badgeColor and the display and layout type on the property badgePosition.

class MyView: UIView { @Invalidating(.display) var badgeColor: UIColor

@Invalidating(.display, .layout) var badgePosition: UIRectEdge }

When you change the badge color, the property wrapper calls setNeedsDisplay(), causing the system to redraw the view. When you change the badge position, the property wrapper also calls setNeedsLayout(), causing the system to update the views subviews before it redraws.

Functions such as setNeedsDisplay() and setNeedsLayout() perform changes on the next update cycle. You can make changes to multiple properties and views before any of those views update. Consolidating the updates to one update cycle is usually better for performance.

Topics

Creating an Invalidating Property Wrapper

init(wrappedValue: Value, InvalidationType)

Creates a property wrapper that notifies the system when a change in the property value invalidates an aspect of the containing view.

Creates a property wrapper that notifies the system when a change in the property value invalidates aspects of the containing view.

See Also

Updating the view when property values change

protocol UIViewInvalidating

Implements a type of invalidation that can occur on a view that requires an update.


https://developer.apple.com/documentation/uikit/uiviewinvalidating


https://developer.apple.com/documentation/uikit/uiview/viewprintformatter()


https://developer.apple.com/documentation/uikit/uiview/addgesturerecognizer(_:)


https://developer.apple.com/documentation/uikit/uiview/removegesturerecognizer(_:)


https://developer.apple.com/documentation/uikit/uiview/canbecomefocused

  • UIKit
  • UIView
  • canBecomeFocused

Instance Property

canBecomeFocused

A Boolean value that indicates whether the view is currently capable of being focused.

@MainActor var canBecomeFocused: Bool { get }

Discussion

The value of this property is true if the view can become focused; false otherwise.

By default, the value of this property is false. This property informs the focus engine if a view is capable of being focused. Sometimes even if a view returns true, a view may not be focusable for the following reasons:

  • The view is hidden.

  • The view has alpha set to 0.

  • The view has userInteractionEnabled set to false.

  • The view is not currently in the view hierarchy.

See Also

Working with focus

class var inheritedAnimationDuration: TimeInterval

Returns the inherited duration of the current animation.

var isFocused: Bool

A Boolean value that indicates whether the item is currently focused.

var focusGroupIdentifier: String?

The identifier of the focus group that this view belongs to.

var focusEffect: UIFocusEffect?

The visual effect to apply when the view becomes focused.

var focusGroupPriority: UIFocusGroupPriority

The importance of the item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uiview/inheritedanimationduration

  • UIKit
  • UIView
  • inheritedAnimationDuration

Type Property

inheritedAnimationDuration

Returns the inherited duration of the current animation.

@MainActor class var inheritedAnimationDuration: TimeInterval { get }

Return Value

The duration of the current animation.

Discussion

This method only returns a non-zero value if called within a UIView animation block.

See Also

Working with focus

var canBecomeFocused: Bool

A Boolean value that indicates whether the view is currently capable of being focused.

var isFocused: Bool

A Boolean value that indicates whether the item is currently focused.

var focusGroupIdentifier: String?

The identifier of the focus group that this view belongs to.

var focusEffect: UIFocusEffect?

The visual effect to apply when the view becomes focused.

var focusGroupPriority: UIFocusGroupPriority

The importance of the item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uiview/isfocused

  • UIKit
  • UIView
  • isFocused

Instance Property

isFocused

A Boolean value that indicates whether the item is currently focused.

@MainActor var isFocused: Bool { get }

Discussion

This is a convenience property that checks whether the item is equal to the value in the UIScreen classs focusedView property.

See Also

Working with focus

var canBecomeFocused: Bool

A Boolean value that indicates whether the view is currently capable of being focused.

class var inheritedAnimationDuration: TimeInterval

Returns the inherited duration of the current animation.

var focusGroupIdentifier: String?

The identifier of the focus group that this view belongs to.

var focusEffect: UIFocusEffect?

The visual effect to apply when the view becomes focused.

var focusGroupPriority: UIFocusGroupPriority

The importance of the item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uiview/focusgroupidentifier

  • UIKit
  • UIView
  • focusGroupIdentifier

Instance Property

focusGroupIdentifier

The identifier of the focus group that this view belongs to.

@MainActor var focusGroupIdentifier: String? { get set }

Discussion

If this property is nil, subviews inherit their superviews focus group.

See Also

Working with focus

var canBecomeFocused: Bool

A Boolean value that indicates whether the view is currently capable of being focused.

class var inheritedAnimationDuration: TimeInterval

Returns the inherited duration of the current animation.

var isFocused: Bool

A Boolean value that indicates whether the item is currently focused.

var focusEffect: UIFocusEffect?

The visual effect to apply when the view becomes focused.

var focusGroupPriority: UIFocusGroupPriority

The importance of the item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uiview/focuseffect

  • UIKit
  • UIView
  • focusEffect

Instance Property

focusEffect

The visual effect to apply when the view becomes focused.

@NSCopying @MainActor var focusEffect: UIFocusEffect? { get set }

Discussion

If this property is nil, the system doesnt apply an effect when the view becomes focused.

See Also

Working with focus

var canBecomeFocused: Bool

A Boolean value that indicates whether the view is currently capable of being focused.

class var inheritedAnimationDuration: TimeInterval

Returns the inherited duration of the current animation.

var isFocused: Bool

A Boolean value that indicates whether the item is currently focused.

var focusGroupIdentifier: String?

The identifier of the focus group that this view belongs to.

var focusGroupPriority: UIFocusGroupPriority

The importance of the item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uiview/focusgrouppriority


https://developer.apple.com/documentation/uikit/uiview/addmotioneffect(_:)


https://developer.apple.com/documentation/uikit/uiview/removemotioneffect(_:)

#app-main)

  • UIKit
  • UIView
  • removeMotionEffect(_:)

Instance Method

removeMotionEffect(_:)

Stops applying a motion effect to the view.

tvOS

@MainActor func removeMotionEffect(_ effect: UIMotionEffect)

Parameters

effect

The motion effect.

Discussion

Any affected presentation values animate to their post-removal values using the present UIView animation context.

See Also

Using motion effects

func addMotionEffect(UIMotionEffect)

Begins applying a motion effect to the view.

var motionEffects: [UIMotionEffect]

The array of motion effects for the view.


https://developer.apple.com/documentation/uikit/uiview/hoverstyle

  • UIKit
  • UIView
  • hoverStyle

Instance Property

hoverStyle

The hover style for the view.

@NSCopying @MainActor var hoverStyle: UIHoverStyle? { get set }

Discussion

The value of this property defaults to nil, which indicates that the view doesnt have any hover effect. Subclasses can configure this style to use a different default value.

See Also

Managing the hover appearance

class UIHoverStyle

The hover style to apply to a view, including an effect and a shape to use for displaying that effect.

class UIHoverEffectLayer


https://developer.apple.com/documentation/uikit/uihoverstyle

  • UIKit
  • UIHoverStyle

Class

UIHoverStyle

The hover style to apply to a view, including an effect and a shape to use for displaying that effect.

@MainActor class UIHoverStyle

Topics

Creating a hover style

convenience init(effect: some UIHoverEffect, shape: UIShape?)

Creates a hover style with the provided effect and shape.

convenience init(shape: UIShape?)

Creates a hover style with the provided shape and an automatic hover effect.

Specifying a hover shape

var shape: UIShape?

The shape to use for the hover effect.

struct UIShape

An abstract representation of a shape.

Specifying a hover effect

var effect: any UIHoverEffect

The effect to apply to the view with this style.

struct UIHoverAutomaticEffect

A system-default hover effect that automatically selects the appropriate effect based on the view to which it applies.

struct UIHoverHighlightEffect

An effect that applies a highlight to the view on hover.

struct UIHoverLiftEffect

An effect that can visually lift the view on hover where appropriate.

protocol UIHoverEffect

A hover effect that can apply to a view through a hover style.

Managing the state of the hover effect

var isEnabled: Bool

A Boolean value that determines whether the hover effect is active.

Relationships

Inherits From

  • NSObject

Inherited By

  • UIPointerStyle

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol

See Also

Managing the hover appearance

var hoverStyle: UIHoverStyle?

The hover style for the view.

class UIHoverEffectLayer


https://developer.apple.com/documentation/uikit/uihovereffectlayer

  • UIKit
  • UIHoverEffectLayer

Class

UIHoverEffectLayer

@MainActor class UIHoverEffectLayer

Topics

Initializers

init(containerView: UIView, style: UIHoverStyle?)

Instance Properties

var containerView: UIView?

var hoverStyle: UIHoverStyle

Relationships

Inherits From

  • CALayer

Conforms To

  • CAMediaTiming
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype

See Also

Managing the hover appearance

var hoverStyle: UIHoverStyle?

The hover style for the view.

class UIHoverStyle

The hover style to apply to a view, including an effect and a shape to use for displaying that effect.


https://developer.apple.com/documentation/uikit/uiview/minimumcontentsizecategory


https://developer.apple.com/documentation/uikit/uiview/maximumcontentsizecategory

  • UIKit
  • UIView
  • maximumContentSizeCategory

Instance Property

maximumContentSizeCategory

The maximum content size category for the view and its subviews.

@MainActor var maximumContentSizeCategory: UIContentSizeCategory? { get set }

Discussion

Use this property to limit which content size categories your view hierarchy supports. The limit applies immediately after you set this value and when future content size category updates occur.

Set this property to nil to remove the maximum limit for the content size category.

See Also

Managing font-sizing preferences

var minimumContentSizeCategory: UIContentSizeCategory?

The minimum content size category for the view and its subviews.

var appliedContentSizeCategoryLimitsDescription: String

A string that lists each of the views superviews, its content size category, and whether that view has content size category limits.


https://developer.apple.com/documentation/uikit/uiview/appliedcontentsizecategorylimitsdescription

  • UIKit
  • UIView
  • appliedContentSizeCategoryLimitsDescription

Instance Property

appliedContentSizeCategoryLimitsDescription

A string that lists each of the views superviews, its content size category, and whether that view has content size category limits.

@MainActor var appliedContentSizeCategoryLimitsDescription: String { get }

See Also

Managing font-sizing preferences

var minimumContentSizeCategory: UIContentSizeCategory?

The minimum content size category for the view and its subviews.

var maximumContentSizeCategory: UIContentSizeCategory?

The maximum content size category for the view and its subviews.


https://developer.apple.com/documentation/uikit/uiview/restorationidentifier

  • UIKit
  • UIView
  • restorationIdentifier

Instance Property

restorationIdentifier

The identifier that determines whether the view supports state restoration.

tvOS

@MainActor var restorationIdentifier: String? { get set }

Discussion

This property indicates whether state information in the view should be preserved; it is also used to identify the view during the restoration process. The value of this property is nil by default, which indicates that the views state does not need to be saved. Assigning a string object to the property lets the owning view controller know that the view has relevant state information to save.

Assign a value to this property only if you are implementing a custom view that implements the encodeRestorableState(with:) and decodeRestorableState(with:) methods for saving and restoring state. You use those methods to write any view-specific state information and subsequently use that data to restore the view to its previous configuration.

See Also

Preserving and restoring state

func encodeRestorableState(with: NSCoder)

Encodes state-related information for the view.

func decodeRestorableState(with: NSCoder)

Decodes and restores state-related information for the view.


https://developer.apple.com/documentation/uikit/uiview/encoderestorablestate(with:)

#app-main)

  • UIKit
  • UIView
  • encodeRestorableState(with:)

Instance Method

encodeRestorableState(with:)

Encodes state-related information for the view.

tvOS

@MainActor func encodeRestorableState(with coder: NSCoder)

Parameters

coder

The coder object to use to encode the state of the view.

Discussion

If your app supports state preservation, you can override this method for any views that have state information that should be saved between launches of your app. You should save only the data required to return the view to its current configuration. Do not save the view object itself and do not save any data that could be determined by other means at launch time.

Few views should need to save state information. Most views should just be configured using the data from their view controller. However, this method is available for those views that have user-configurable state that would be otherwise lost between app launches.

Your implementation of this method can encode other restorable view and view controller objects that it needs to reference. Encoding a restorable view or view controller writes that objects restoration identifier to the coder. (That identifier is used during the decode process to locate the new version of the object.) If the view or view controller defines its own version of this method, that method is also called at some point so that the object can encode its own state.

Apart from views and view controllers, other objects follow the normal serialization process and must adopt the NSCoding protocol before they can be encoded. Encoding such objects embeds the objects contents in the archive directly. During the decode process, a new object is created and initialized with the data from the archive.

It is recommended that you call super at some point during your implementation to give parent classes an opportunity to save their state information.

See Also

Preserving and restoring state

var restorationIdentifier: String?

The identifier that determines whether the view supports state restoration.

func decodeRestorableState(with: NSCoder)

Decodes and restores state-related information for the view.


https://developer.apple.com/documentation/uikit/uiview/decoderestorablestate(with:)


https://developer.apple.com/documentation/uikit/uiview/snapshotview(afterscreenupdates:)


https://developer.apple.com/documentation/uikit/uiview/resizablesnapshotview(from:afterscreenupdates:withcapinsets:)

#app-main)

  • UIKit
  • UIView
  • resizableSnapshotView(from:afterScreenUpdates:withCapInsets:)

Instance Method

resizableSnapshotView(from:afterScreenUpdates:withCapInsets:)

Returns a snapshot view based on the specified contents of the current view, with stretchable insets.

tvOS

@MainActor func resizableSnapshotView( from rect: CGRect, afterScreenUpdates afterUpdates: Bool, withCapInsets capInsets: UIEdgeInsets

Parameters

rect

The portion of the view that you want to capture. The rectangle must be in the bounds coordinate space of the current view.

afterUpdates

A Boolean value that specifies whether the snapshot should be taken after recent changes have been incorporated. Pass the value false if you want to capture the screen in its current state, which might not include recent changes.

capInsets

The edge insets that define the stretchable portion of the returned views content. You can specify zero if you do not want the contents of the returned view to have a stretchable area.

Return Value

A new view object containing a snapshot of the current views rendered contents.

Discussion

This method very efficiently captures the current rendered appearance of a view and uses it to build a new snapshot view with stretchable insets. You can use the returned view as a visual stand-in for the current view in your app. For example, you might use a snapshot view for animations where updating a large view hierarchy might be expensive. Because the content is captured from the already rendered content, this method reflects the current visual appearance of the view and is not updated to reflect animations that are scheduled or in progress. However, calling this method is faster than trying to render the contents of the current view into a bitmap image yourself.

Because the returned snapshot is a view object, you can modify it and its layer object as needed. However, you cannot change the contents property of the snapshot views layer; attempts to do so fail silently. If the current view is not yet rendered, perhaps because it is not yet onscreen, the snapshot view has no visible content.

You can call this method on a previously generated snapshot to obtain a new snapshot. For example, you could do so after you change properties of a previous snapshot (such as its alpha value) and want a new snapshot that includes those changes.

If you want to apply a graphical effect, such as blur, to a snapshot, use the drawHierarchy(in:afterScreenUpdates:) method instead.

If you specify nonzero edge insets in the capInsets parameter, those values determine the returned snapshots stretchable content area.

See Also

Capturing a view snapshot

Returns a snapshot view based on the contents of the current view.

Renders a snapshot of the complete view hierarchy as visible onscreen into the current context.


https://developer.apple.com/documentation/uikit/uiview/drawhierarchy(in:afterscreenupdates:)

#app-main)

  • UIKit
  • UIView
  • drawHierarchy(in:afterScreenUpdates:)

Instance Method

drawHierarchy(in:afterScreenUpdates:)

Renders a snapshot of the complete view hierarchy as visible onscreen into the current context.

tvOS

@MainActor func drawHierarchy( in rect: CGRect, afterScreenUpdates afterUpdates: Bool

Parameters

rect

A rectangle specified in the local coordinate system (bounds) of the view.

afterUpdates

A Boolean value that indicates whether the snapshot should be rendered after recent changes have been incorporated. Specify the value false if you want to render a snapshot in the view hierarchys current state, which might not include recent changes.

Return Value

Returns true if the snapshot is complete, or false if the snapshot is missing image data for any view in the hierarchy.

Discussion

Use this method when you want to apply a graphical effect, such as a blur, to a view snapshot. This method is not as fast as the snapshotView(afterScreenUpdates:) method.

See Also

Capturing a view snapshot

Returns a snapshot view based on the contents of the current view.

Returns a snapshot view based on the specified contents of the current view, with stretchable insets.


https://developer.apple.com/documentation/uikit/uiview/tag

  • UIKit
  • UIView
  • tag

Instance Property

tag

An integer that you can use to identify view objects in your application.

tvOS

@MainActor var tag: Int { get set }

Discussion

The default value is 0. You can set the value of this tag and use that value to identify the view later.

See Also

Identifying the view at runtime

Returns the view whose tag matches the specified value.


https://developer.apple.com/documentation/uikit/uiview/viewwithtag(_:)


https://developer.apple.com/documentation/uikit/uiview/convert(_:to:)-1xizt


https://developer.apple.com/documentation/uikit/uiview/convert(_:from:)-8neo1

-8neo1#app-main)

  • UIKit
  • UIView
  • convert(_:from:)

Instance Method

convert(_:from:)

Converts a point from the coordinate system of a given view to that of the receiver.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor func convert( _ point: CGPoint, from view: UIView?

Parameters

point

A point specified in the local coordinate system (bounds) of view.

view

The view with point in its coordinate system. If view is nil, this method instead converts from window base coordinates. Otherwise, both view and the receiver must belong to the same UIWindow object.

Return Value

The point converted to the local coordinate system (bounds) of the receiver.

See Also

Converting between view coordinate systems

Converts a point from the receivers coordinate system to that of the specified view.

Converts a rectangle from the receivers coordinate system to that of another view.

Converts a rectangle from the coordinate system of another view to that of the receiver.


https://developer.apple.com/documentation/uikit/uiview/convert(_:to:)-2kf3d


https://developer.apple.com/documentation/uikit/uiview/convert(_:from:)-7irzk


https://developer.apple.com/documentation/uikit/uiview/hittest(_:with:)


https://developer.apple.com/documentation/uikit/uiview/point(inside:with:)


https://developer.apple.com/documentation/uikit/uiview/endediting(_:)

#app-main)

  • UIKit
  • UIView
  • endEditing(_:)

Instance Method

endEditing(_:)

Causes the view (or one of its embedded text fields) to resign the first responder status.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor

Parameters

force

Specify true to force the first responder to resign, regardless of whether it wants to do so.

Return Value

true if the view resigned the first responder status or false if it did not.

Discussion

This method looks at the current view and its subview hierarchy for the text field that is currently the first responder. If it finds one, it asks that text field to resign as first responder. If the force parameter is set to true, the text field is never even asked; it is forced to resign.


https://developer.apple.com/documentation/uikit/uiview/accessibilityignoresinvertcolors

  • UIKit
  • UIView
  • accessibilityIgnoresInvertColors

Instance Property

accessibilityIgnoresInvertColors

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

@MainActor var accessibilityIgnoresInvertColors: Bool { get set }

Discussion

Inverting colors is often used to help users with light or color sensitivities to make bright colors darker. However, this behavior can have a destructive impact on images and videos. If inverting the colors would have a negative impact on your views content, set this property to true to prevent it from inverting its colors. Setting the property to true prevents the system from inverting the colors of the view and all of its subviews.

See Also

Modifying the accessibility behavior

var largeContentImage: UIImage?

An image that represents the view in the large content viewer.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

var largeContentTitle: String?

A string that describes the view in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.

var showsLargeContentViewer: Bool

A Boolean value that indicates whether to show the view in the large content viewer.


https://developer.apple.com/documentation/uikit/uiview/largecontentimage

  • UIKit
  • UIView
  • largeContentImage

Instance Property

largeContentImage

An image that represents the view in the large content viewer.

@MainActor var largeContentImage: UIImage? { get set }

Discussion

To present content in the large content viewer, you can provide either largeContentTitle or largeContentImage, or both.

This property defaults to an appropriate value for UIKit classes; otherwise, its nil.

See Also

Modifying the accessibility behavior

var accessibilityIgnoresInvertColors: Bool

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

var largeContentTitle: String?

A string that describes the view in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.

var showsLargeContentViewer: Bool

A Boolean value that indicates whether to show the view in the large content viewer.


https://developer.apple.com/documentation/uikit/uiview/largecontentimageinsets

  • UIKit
  • UIView
  • largeContentImageInsets

Instance Property

largeContentImageInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

@MainActor var largeContentImageInsets: UIEdgeInsets { get set }

Discussion

This property defaults to zero.

See Also

Modifying the accessibility behavior

var accessibilityIgnoresInvertColors: Bool

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

var largeContentImage: UIImage?

An image that represents the view in the large content viewer.

var largeContentTitle: String?

A string that describes the view in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.

var showsLargeContentViewer: Bool

A Boolean value that indicates whether to show the view in the large content viewer.


https://developer.apple.com/documentation/uikit/uiview/largecontenttitle

  • UIKit
  • UIView
  • largeContentTitle

Instance Property

largeContentTitle

A string that describes the view in the large content viewer.

@MainActor var largeContentTitle: String? { get set }

Discussion

To present content in the large content viewer, you can provide either largeContentTitle or largeContentImage, or both.

This property defaults to an appropriate value for UIKit classes; otherwise, its nil.

See Also

Modifying the accessibility behavior

var accessibilityIgnoresInvertColors: Bool

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

var largeContentImage: UIImage?

An image that represents the view in the large content viewer.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.

var showsLargeContentViewer: Bool

A Boolean value that indicates whether to show the view in the large content viewer.


https://developer.apple.com/documentation/uikit/uiview/scaleslargecontentimage

  • UIKit
  • UIView
  • scalesLargeContentImage

Instance Property

scalesLargeContentImage

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.

@MainActor var scalesLargeContentImage: Bool { get set }

Discussion

If false, the viewer displays the image at its intrinsic size.

See Also

Modifying the accessibility behavior

var accessibilityIgnoresInvertColors: Bool

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

var largeContentImage: UIImage?

An image that represents the view in the large content viewer.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

var largeContentTitle: String?

A string that describes the view in the large content viewer.

var showsLargeContentViewer: Bool

A Boolean value that indicates whether to show the view in the large content viewer.


https://developer.apple.com/documentation/uikit/uiview/showslargecontentviewer

  • UIKit
  • UIView
  • showsLargeContentViewer

Instance Property

showsLargeContentViewer

A Boolean value that indicates whether to show the view in the large content viewer.

@MainActor var showsLargeContentViewer: Bool { get set }

Discussion

For this property to take effect, the view must have a UILargeContentViewerInteraction.

See Also

Modifying the accessibility behavior

var accessibilityIgnoresInvertColors: Bool

A Boolean value indicating whether the view ignores an accessibility request to invert its colors.

var largeContentImage: UIImage?

An image that represents the view in the large content viewer.

var largeContentImageInsets: UIEdgeInsets

Insets to adjust the position of the views image so it appears centered in the large content viewer.

var largeContentTitle: String?

A string that describes the view in the large content viewer.

var scalesLargeContentImage: Bool

A Boolean value that indicates whether the large content viewer scales the items image to a larger size.


https://developer.apple.com/documentation/uikit/uiview/animate(springduration:bounce:initialspringvelocity:delay:options:animations:completion:)

#app-main)

  • UIKit
  • UIView
  • animate(springDuration:bounce:initialSpringVelocity:delay:options:animations:completion:)

Type Method

animate(springDuration:bounce:initialSpringVelocity:delay:options:animations:completion:)

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Mac Catalyst

@MainActor @preconcurrency class func animate( springDuration duration: TimeInterval = 0.5, bounce: CGFloat = 0.0, initialSpringVelocity: CGFloat = 0.0, delay: TimeInterval = 0.0, options: UIView.AnimationOptions = [],

)

Discussion

See Also

Animating views

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:delay:options:animations:completion:)

#app-main)

  • UIKit
  • UIView
  • animate(withDuration:delay:options:animations:completion:)

Type Method

animate(withDuration:delay:options:animations:completion:)

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

tvOS

@MainActor class func animate( withDuration duration: TimeInterval, delay: TimeInterval, options: UIView.AnimationOptions = [],

)

Parameters

duration

The total duration of the animations, measured in seconds. If you specify a negative value or 0, the changes are made without animating them.

delay

The amount of time (measured in seconds) to wait before beginning the animations. Specify a value of 0 to begin the animations immediately.

options

A mask of options indicating how you want to perform the animations. For a list of valid constants, see UIView.AnimationOptions.

animations

A block object containing the changes to commit to the views. This is where you programmatically change any animatable properties of the views in your view hierarchy. This block takes no parameters and has no return value. This parameter must not be NULL.

completion

A block object to be executed when the animation sequence ends. This block has no return value and takes a single Boolean argument that indicates whether or not the animations actually finished before the completion handler was called. If the duration of the animation is 0, this block is performed at the beginning of the next run loop cycle. This parameter may be NULL.

Discussion

This method initiates a set of animations to perform on the view. The block object in the animations parameter contains the code for animating the properties of one or more views.

During an animation, user interactions are temporarily disabled for the views being animated. (Prior to iOS 5, user interactions are disabled for the entire application.) If you want users to be able to interact with the views, include the allowUserInteraction constant in the options parameter.

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:animations:completion:)


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:animations:)

#app-main)

  • UIKit
  • UIView
  • animate(withDuration:animations:)

Type Method

animate(withDuration:animations:)

Animate changes to one or more views using the specified duration.

tvOS

@MainActor class func animate( withDuration duration: TimeInterval,

)

Parameters

duration

The total duration of the animations, measured in seconds. If you specify a negative value or 0, the changes are made without animating them.

animations

A block object containing the changes to commit to the views. This is where you programmatically change any animatable properties of the views in your view hierarchy. This block takes no parameters and has no return value. This parameter must not be NULL.

Discussion

This method performs the specified animations immediately using the curveEaseInOut and UIViewAnimationOptionTransitionNone animation options.

During an animation, user interactions are temporarily disabled for the views being animated. (Prior to iOS 5, user interactions are disabled for the entire application.)

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/transition(with:duration:options:animations:completion:)


https://developer.apple.com/documentation/uikit/uiview/transition(from:to:duration:options:completion:)

#app-main)

  • UIKit
  • UIView
  • transition(from:to:duration:options:completion:)

Type Method

transition(from:to:duration:options:completion:)

Creates a transition animation between the specified views using the given parameters.

tvOS

@MainActor class func transition( from fromView: UIView, to toView: UIView, duration: TimeInterval, options: UIView.AnimationOptions = [],

)

Parameters

fromView

The starting view for the transition. By default, this view is removed from its superview as part of the transition.

toView

The ending view for the transition. By default, this view is added to the superview of fromView as part of the transition.

duration

The duration of the transition animation, measured in seconds. If you specify a negative value or 0, the transition is made without animations.

options

A mask of options indicating how you want to perform the animations. For a list of valid constants, see UIView.AnimationOptions.

completion

A block object to be executed when the animation sequence ends. This block has no return value and takes a single Boolean argument that indicates whether or not the animations actually finished before the completion handler was called. If the duration of the animation is 0, this block is performed at the beginning of the next run loop cycle. This parameter may be NULL.

Discussion

This method provides a simple way to transition from the view in the fromView parameter to the view in the toView parameter. By default, the view in fromView is replaced in the view hierarchy by the view in toView. If both views are already part of your view hierarchy, you can include the showHideTransitionViews option in the options parameter to simply hide or show them.

This method modifies the views in their view hierarchy only. It does not modify your applications view controllers in any way. For example, if you use this method to change the root view displayed by a view controller, it is your responsibility to update the view controller appropriately to handle the change.

The view transition starts immediately unless another animation is already in-flight, in which case it starts immediately after the current animation finishes.

During an animation, user interactions are temporarily disabled for the views being animated. (Prior to iOS 5, user interactions are disabled for the entire application.) If you want users to be able to interact with the views, include the allowUserInteraction constant in the options parameter.

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/animatekeyframes(withduration:delay:options:animations:completion:)

#app-main)

  • UIKit
  • UIView
  • animateKeyframes(withDuration:delay:options:animations:completion:)

Type Method

animateKeyframes(withDuration:delay:options:animations:completion:)

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

tvOS

@MainActor class func animateKeyframes( withDuration duration: TimeInterval, delay: TimeInterval, options: UIView.KeyframeAnimationOptions = [],

) @MainActor class func animateKeyframes( withDuration duration: TimeInterval, delay: TimeInterval, options: UIView.KeyframeAnimationOptions = [],

Parameters

duration

The duration of the overall animation, measured in seconds. If you specify a negative value or 0, changes are made immediately and without animations.

delay

Specifies the time (in seconds) to wait before starting the animation.

options

A mask of options indicating how you want to perform the animations. For a list of valid constants, see UIView.KeyframeAnimationOptions.

animations

A block object containing the changes to commit to the views. Typically, you call the addKeyframe(withRelativeStartTime:relativeDuration:animations:) method one or more times from inside this block. You may also change view values directly if you want those changes to animate over the full duration. This block takes no parameters and has no return value. Do not use a nil value for this parameter.

completion

A block object to be executed when the animation sequence ends. This block has no return value and takes a single Boolean argument that indicates whether or not the animations finished before the completion handler was called. If the duration of the animation is 0, this block is performed at the beginning of the next run loop cycle. You can use a nil value for this parameter.

Discussion

This method creates an animation block that you can use to set up a keyframe-based animation. The keyframes themselves are not part of the initial animation block you create using this method. Inside the animations block, you must add the keyframe time and animation data by calling the addKeyframe(withRelativeStartTime:relativeDuration:animations:) method one or more times. Adding keyframes causes the animation to animate the view from its current value to the value of the first keyframe, then to the value of the next keyframe, and so on at the times you specify.

If you do not add any keyframes in the animations block, the animation proceeds from start to end like a standard animation block. In other words, the system animates from the current view values to any new values over the specified duration.

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/addkeyframe(withrelativestarttime:relativeduration:animations:)

#app-main)

  • UIKit
  • UIView
  • addKeyframe(withRelativeStartTime:relativeDuration:animations:)

Type Method

addKeyframe(withRelativeStartTime:relativeDuration:animations:)

Specifies the timing and animation values for a single frame of a keyframe animation.

tvOS

@MainActor class func addKeyframe( withRelativeStartTime frameStartTime: Double, relativeDuration frameDuration: Double,

)

Parameters

frameStartTime

The time at which to start the specified animations. This value must be in the range 0 to 1, where 0 represents the start of the overall animation and 1 represents the end of the overall animation. For example, for an animation that is two seconds in duration, specifying a start time of 0.5 causes the animations to begin executing one second after the start of the overall animation.

frameDuration

The length of time over which to animate to the specified value. This value must be in the range 0 to 1 and indicates the amount of time relative to the overall animation length. If you specify a value of 0, any properties you set in the animations block update immediately at the specified start time. If you specify a nonzero value, the properties animate over that amount of time. For example, for an animation that is two seconds in duration, specifying a duration of 0.5 results in an animation duration of one second.

animations

A block object containing the animations you want to perform. This is where you programmatically change any animatable properties of the views in your view hierarchy. This block takes no parameters and has no return value. This parameter must not be nil.

Discussion

To animate view properties during a keyframe animation, call this method from within the animation block you pass to the animateKeyframes(withDuration:delay:options:animations:completion:) method. To animate between different values, or to tweak the timing of your view property animations, you can call this method multiple times within a block.

The view properties you change in the animations block animate over the timespan you specify in frameDuration parameter. The properties do not begin animating until the time you specify in the frameStartTime parameter. After the frame start time, the animation executes over its specified duration or until interrupted by another animation.

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:delay:usingspringwithdamping:initialspringvelocity:options:animations:completion:)

#app-main)

  • UIKit
  • UIView
  • animate(withDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)

Type Method

animate(withDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

tvOS

@MainActor class func animate( withDuration duration: TimeInterval, delay: TimeInterval, usingSpringWithDamping dampingRatio: CGFloat, initialSpringVelocity velocity: CGFloat, options: UIView.AnimationOptions = [],

)

Parameters

duration

The total duration of the animations, measured in seconds. If you specify a negative value or 0, the changes are made without animating them.

delay

The amount of time (measured in seconds) to wait before beginning the animations. Specify a value of 0 to begin the animations immediately.

dampingRatio

The damping ratio for the spring animation as it approaches its quiescent state.

To smoothly decelerate the animation without oscillation, use a value of 1. Employ a damping ratio closer to zero to increase oscillation.

velocity

The initial spring velocity. For smooth start to the animation, match this value to the views velocity as it was prior to attachment.

A value of 1 corresponds to the total animation distance traversed in one second. For example, if the total animation distance is 200 points and you want the start of the animation to match a view velocity of 100 pt/s, use a value of 0.5.

options

A mask of options indicating how you want to perform the animations. For a list of valid constants, see UIView.AnimationOptions.

animations

A block object containing the changes to commit to the views. This is where you programmatically change any animatable properties of the views in your view hierarchy. This block takes no parameters and has no return value. This parameter must not be NULL.

completion

A block object to be executed when the animation sequence ends. This block has no return value and takes a single Boolean argument that indicates whether or not the animations actually finished before the completion handler was called. If the duration of the animation is 0, this block is performed at the beginning of the next run loop cycle. This parameter may be NULL.

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Disables a view transition animation.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/performwithoutanimation(_:)

#app-main)

  • UIKit
  • UIView
  • performWithoutAnimation(_:)

Type Method

performWithoutAnimation(_:)

Disables a view transition animation.

tvOS

@MainActor

Parameters

actionsWithoutAnimation

The view transition code that you want to perform without animation.

See Also

class var areAnimationsEnabled: Bool

Returns a Boolean value indicating whether animations are enabled.

class func setAnimationsEnabled(Bool)

Sets whether animations are enabled.

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.


https://developer.apple.com/documentation/uikit/uiview/modifyanimations(withrepeatcount:autoreverses:animations:)

#app-main)

  • UIKit
  • UIView
  • modifyAnimations(withRepeatCount:autoreverses:animations:)

Type Method

modifyAnimations(withRepeatCount:autoreverses:animations:)

Repeats the specified animations a specific number of times, optionally running the animation forward and backward.

@MainActor class func modifyAnimations( withRepeatCount count: CGFloat, autoreverses: Bool,

)

Parameters

count

The number of times to repeat the animations.

autoreverses

A Boolean value that indicates whether the animations run forward and backward.

animations

The animations to perform.

Discussion

You must call this method from within an enclosing animation block. The inverse nesting, calling animate(withDuration:animations:) from inside the modifyAnimations(withRepeatCount:autoreverses:animations:) block, doesnt work.

UIView.animate(withDuration: 1.0) { UIView.modifyAnimations(withRepeatCount: 2, autoreverses: true) { // Set view properties. } }

See Also

Animating views

Animates changes to one or more views using a spring animation with the specified duration, bounce, initial velocity, delay, options, and completion handler.

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

Animate changes to one or more views using the specified duration and completion handler.

Animate changes to one or more views using the specified duration.

Creates a transition animation for the specified container view.

Creates a transition animation between the specified views using the given parameters.

Creates an animation block object that can be used to set up keyframe-based animations for the current view.

Specifies the timing and animation values for a single frame of a keyframe animation.

Performs a specified system-provided animation on one or more views, along with optional parallel animations that you define.

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

Disables a view transition animation.


https://developer.apple.com/documentation/uikit/uiview/animationcurve

  • UIKit
  • UIView
  • UIView.AnimationCurve

Enumeration

UIView.AnimationCurve

Specifies the supported animation curves.

iOSiPadOSMac CatalysttvOSvisionOS

enum AnimationCurve

Topics

Constants

case easeInOut

An ease-in ease-out curve causes the animation to begin slowly, accelerate through the middle of its duration, and then slow again before completing. This is the default curve for most animations.

case easeIn

An ease-in curve causes the animation to begin slowly, and then speed up as it progresses.

case easeOut

An ease-out curve causes the animation to begin quickly, and then slow down as it completes.

case linear

A linear animation curve causes an animation to occur evenly over its duration.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Constants

struct AnimationOptions

Options for animating views using block objects.

enum AnimationTransition

Animation transition options for use in an animation block object.

enum SystemAnimation

Option to remove the views from the hierarchy when animation is complete.

struct KeyframeAnimationOptions

Options for configuring keyframe-based animations.

enum Axis

Keys that specify a horizontal or vertical layout constraint between objects.

enum TintAdjustmentMode

The tint adjustment mode for the view.

class let layoutFittingCompressedSize: CGSize

The option to use the smallest possible size.

class let layoutFittingExpandedSize: CGSize

The option to use the largest possible size.

class let noIntrinsicMetric: CGFloat

The absence of an intrinsic metric for a given numeric view property.

struct AutoresizingMask

Options for automatic view resizing.

enum UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.


https://developer.apple.com/documentation/uikit/uiview/animationoptions


https://developer.apple.com/documentation/uikit/uiview/animationtransition


https://developer.apple.com/documentation/uikit/uiview/systemanimation

  • UIKit
  • UIView
  • UIView.SystemAnimation

Enumeration

UIView.SystemAnimation

Option to remove the views from the hierarchy when animation is complete.

tvOS

enum SystemAnimation

Topics

Constants

case delete

Option to remove views from the view hierarchy when animation is complete.

Initializers

init?(rawValue: UInt)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Constants

enum AnimationCurve

Specifies the supported animation curves.

struct AnimationOptions

Options for animating views using block objects.

enum AnimationTransition

Animation transition options for use in an animation block object.

struct KeyframeAnimationOptions

Options for configuring keyframe-based animations.

enum Axis

Keys that specify a horizontal or vertical layout constraint between objects.

enum TintAdjustmentMode

The tint adjustment mode for the view.

class let layoutFittingCompressedSize: CGSize

The option to use the smallest possible size.

class let layoutFittingExpandedSize: CGSize

The option to use the largest possible size.

class let noIntrinsicMetric: CGFloat

The absence of an intrinsic metric for a given numeric view property.

struct AutoresizingMask

Options for automatic view resizing.

enum UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.


https://developer.apple.com/documentation/uikit/uiview/keyframeanimationoptions

  • UIKit
  • UIView
  • UIView.KeyframeAnimationOptions

Structure

UIView.KeyframeAnimationOptions

Options for configuring keyframe-based animations.

tvOS

struct KeyframeAnimationOptions

Overview

Use these options with the animateKeyframes(withDuration:delay:options:animations:completion:) method.

Topics

Constants

static var layoutSubviews: UIView.KeyframeAnimationOptions

The option to lay out subviews at commit time so that theyre animated along with their parent.

static var allowUserInteraction: UIView.KeyframeAnimationOptions

The option that allows a person to interact with views while theyre being animated.

static var beginFromCurrentState: UIView.KeyframeAnimationOptions

The option to start an animation from the current setting associated with an already in-flight animation.

static var `repeat`: UIView.KeyframeAnimationOptions

The option to repeat an animation indefinitely.

static var autoreverse: UIView.KeyframeAnimationOptions

The option to run an animation backwards and forwards.

static var overrideInheritedDuration: UIView.KeyframeAnimationOptions

The option to force an animation to use the original duration value specified when the animation was submitted.

static var overrideInheritedOptions: UIView.KeyframeAnimationOptions

The option to not inherit the animation type or any options.

static var calculationModeLinear: UIView.KeyframeAnimationOptions

The option to use a simple linear calculation when interpolating between keyframe values.

static var calculationModeDiscrete: UIView.KeyframeAnimationOptions

The option to not interpolate between keyframe values, but rather to jump directly to each new keyframe value.

static var calculationModePaced: UIView.KeyframeAnimationOptions

The option to compute intermediate keyframe values using a simple pacing algorithm.

static var calculationModeCubic: UIView.KeyframeAnimationOptions

The option to compute intermediate frames using a default Catmull-Rom spline that passes through the keyframe values.

static var calculationModeCubicPaced: UIView.KeyframeAnimationOptions

The option to compute intermediate frames using the cubic scheme while ignoring the timing properties of the animation.

Initializers

init(rawValue: UInt)

Creates keyframe animation options with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • ExpressibleByArrayLiteral
  • OptionSet
  • RawRepresentable
  • Sendable
  • SendableMetatype
  • SetAlgebra

See Also

Constants

enum AnimationCurve

Specifies the supported animation curves.

struct AnimationOptions

Options for animating views using block objects.

enum AnimationTransition

Animation transition options for use in an animation block object.

enum SystemAnimation

Option to remove the views from the hierarchy when animation is complete.

enum Axis

Keys that specify a horizontal or vertical layout constraint between objects.

enum TintAdjustmentMode

The tint adjustment mode for the view.

class let layoutFittingCompressedSize: CGSize

The option to use the smallest possible size.

class let layoutFittingExpandedSize: CGSize

The option to use the largest possible size.

class let noIntrinsicMetric: CGFloat

The absence of an intrinsic metric for a given numeric view property.

struct AutoresizingMask

Options for automatic view resizing.

enum UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.


https://developer.apple.com/documentation/uikit/nslayoutconstraint/axis

  • UIKit
  • NSLayoutConstraint
  • NSLayoutConstraint.Axis

Enumeration

NSLayoutConstraint.Axis

Keys that specify a horizontal or vertical layout constraint between objects.

iOSiPadOSMac CatalysttvOSvisionOS

enum Axis

Topics

Constants

case horizontal

The constraint applied when laying out the horizontal relationship between objects.

case vertical

The constraint applied when laying out the vertical relationship between objects.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Constants

enum Relation

The relation between the first attribute and the modified second attribute in a constraint.

enum Attribute

The part of the objects visual representation that should be used to get the value for the constraint.

struct FormatOptions

A bit mask that specifies both a part of an interface element to align and a direction for the alignment between two interface elements.

enum Orientation

The layout constraint orientation, either horizontal or vertical, that the constraint uses to enforce layout between objects.

struct NSEdgeInsets

A description of the distance between the edges of two rectangles.

var NSLAYOUTCONSTRAINT_H: Int32


https://developer.apple.com/documentation/uikit/uiview/tintadjustmentmode-swift.enum

  • UIKit
  • UIView
  • UIView.TintAdjustmentMode

Enumeration

UIView.TintAdjustmentMode

The tint adjustment mode for the view.

tvOS

enum TintAdjustmentMode

Topics

Constants

case automatic

The tint adjustment mode of the view is the same as its superviews tint adjustment mode (or UIViewTintAdjustmentModeNormal if the view has no superview).

case normal

The views tint color property returns the completely unmodified tint color of the view.

case dimmed

The views tint color property returns a desaturated, dimmed version of the views original tint color.

Initializers

init?(rawValue: Int)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Constants

enum AnimationCurve

Specifies the supported animation curves.

struct AnimationOptions

Options for animating views using block objects.

enum AnimationTransition

Animation transition options for use in an animation block object.

enum SystemAnimation

Option to remove the views from the hierarchy when animation is complete.

struct KeyframeAnimationOptions

Options for configuring keyframe-based animations.

enum Axis

Keys that specify a horizontal or vertical layout constraint between objects.

class let layoutFittingCompressedSize: CGSize

The option to use the smallest possible size.

class let layoutFittingExpandedSize: CGSize

The option to use the largest possible size.

class let noIntrinsicMetric: CGFloat

The absence of an intrinsic metric for a given numeric view property.

struct AutoresizingMask

Options for automatic view resizing.

enum UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.


https://developer.apple.com/documentation/uikit/uiview/layoutfittingcompressedsize


https://developer.apple.com/documentation/uikit/uiview/layoutfittingexpandedsize

  • UIKit
  • UIView
  • layoutFittingExpandedSize

Type Property

layoutFittingExpandedSize

The option to use the largest possible size.

tvOS

class let layoutFittingExpandedSize: CGSize

See Also

Constants

enum AnimationCurve

Specifies the supported animation curves.

struct AnimationOptions

Options for animating views using block objects.

enum AnimationTransition

Animation transition options for use in an animation block object.

enum SystemAnimation

Option to remove the views from the hierarchy when animation is complete.

struct KeyframeAnimationOptions

Options for configuring keyframe-based animations.

enum Axis

Keys that specify a horizontal or vertical layout constraint between objects.

enum TintAdjustmentMode

The tint adjustment mode for the view.

class let layoutFittingCompressedSize: CGSize

The option to use the smallest possible size.

class let noIntrinsicMetric: CGFloat

The absence of an intrinsic metric for a given numeric view property.

struct AutoresizingMask

Options for automatic view resizing.

enum UISemanticContentAttribute

A semantic description of the views contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.


https://developer.apple.com/documentation/uikit/uiview/nointrinsicmetric


https://developer.apple.com/documentation/uikit/uiview/autoresizingmask-swift.struct


https://developer.apple.com/documentation/uikit/uisemanticcontentattribute


https://developer.apple.com/documentation/uikit/uiview-deprecated-symbols


https://developer.apple.com/documentation/uikit/uiview/init()

#app-main)

  • UIKit
  • UIView
  • init()

Initializer

init()

@MainActor convenience init()


https://developer.apple.com/documentation/uikit/uiview/setneedsupdateproperties()


https://developer.apple.com/documentation/uikit/uiview/updateproperties()


https://developer.apple.com/documentation/uikit/uiview/updatepropertiesifneeded()


https://developer.apple.com/documentation/uikit/uiview/animate(_:changes:completion:)

#app-main)

  • UIKit
  • UIView
  • animate(_:changes:completion:)

Type Method

animate(_:changes:completion:)

Mac Catalyst

@MainActor @preconcurrency static func animate( _ animation: Animation,

)


https://developer.apple.com/documentation/uikit/uiview/invalidations

  • UIKit
  • UIView
  • UIView.Invalidations

Enumeration

UIView.Invalidations

Changes that cause an aspect of a view to be invalid and require an update.

Mac CatalystvisionOSSwift 5.1+

enum Invalidations

Topics

Invalidation types

struct Configuration

A change that invalidates a views configuration.

struct Constraints

A change that invalidates a views constraints.

struct Display

A change that requires the system to redraw a views content.

struct IntrinsicContentSize

A change that invalidates a views intrinsic size.

struct Layout

A change that invalidates the layout of the containing views subviews.

struct Tuple

A change that invalidates a combination of factors covered by the other invalidation types.

Structures

struct Properties

See Also

Invalidating the view

func invalidate(view: UIView)

Indicates to the system that an aspect of a view is invalid and triggers the necessary update.

Required


https://developer.apple.com/documentation/uikit/uibackgroundextensionview

  • UIKit
  • UIBackgroundExtensionView Beta

Class

UIBackgroundExtensionView

A view that extends content to fill its own bounds.

@MainActor class UIBackgroundExtensionView

Overview

A background extension view can be laid out to extend outside the safe area, such as under a sidebar or an inspector. By default, the view lays out its content to stay within the safe area, and uses modifications of the content along the edges to fill the container view.

Topics

Instance Properties

var automaticallyPlacesContentView: Bool

Controls the automatic safe area placement of the contentView within the container.

var contentView: UIView?

The content view to extend to fill the UIBackgroundExtensionView.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Interacting with adjacent views

class UIScrollEdgeElementContainerInteraction

Add this interaction to a container view of views that overlay the edge of a scroll view. Any descendants of this view that should affect the shape of the edge effect, such as labels, images, glass views, and controls, will automatically do so.

Beta

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software


https://developer.apple.com/documentation/uikit/uicollectionreusableview

  • UIKit
  • UICollectionReusableView

Class

UICollectionReusableView

A view that defines the behavior for all cells and supplementary views presented by a collection view.

tvOS

@MainActor class UICollectionReusableView

Overview

Reusable views are so named because the collection view places them on a reuse queue rather than deleting them when theyre scrolled out of the visible bounds. Such a view can then be retrieved and repurposed for a different set of content.

Subclassing notes

This class is intended to be subclassed. Most methods defined by this class have minimal or no implementations. You arent required to override any of the methods but can do so in cases where you want to respond to changes in the views usage or layout.

Topics

Reusing cells

var reuseIdentifier: String?

A string that identifies the purpose of the view.

func prepareForReuse()

Performs any clean up necessary to prepare the view for use again.

Managing layout changes

Gives the cell a chance to modify the attributes provided by the layout object.

func apply(UICollectionViewLayoutAttributes)

Applies the specified layout attributes to the view.

func willTransition(from: UICollectionViewLayout, to: UICollectionViewLayout)

Tells your view that the layout object of the collection view is about to change.

func didTransition(from: UICollectionViewLayout, to: UICollectionViewLayout)

Tells your view that the layout object of the collection view changed.

Relationships

Inherits From

  • UIView

Inherited By

  • UICollectionViewCell

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Cells

class UICollectionViewCell

A single data item when that item is within the collection views visible bounds.

class UICollectionViewListCell

A collection view cell that provides list features and default styling.


https://developer.apple.com/documentation/uikit/uiinputview

  • UIKit
  • UIInputView

Class

UIInputView

An object that displays and manages custom input for a view when that view becomes the first responder.

tvOS

@MainActor class UIInputView

Overview

The UIInputView class is designed to match the appearance of the standard system keyboard when used as an input view with a responder. When defining your own custom input views or input accessory views, you can use a UIInputView object as the root view and add any subviews you want to create your input view. The input view and its subviews receive tinting and blur effects based on the options you specify at initialization time.

Topics

Initializing an input view

init(frame: CGRect, inputViewStyle: UIInputView.Style)

Initializes and returns an input view using the specified style information.

init?(coder: NSCoder)

Creates an input view from data in an unarchiver.

Getting the input style

var inputViewStyle: UIInputView.Style

The style for the content of the view.

enum Style

Constants that indicate the appearance changes for an input view.

Sizing the input view

var allowsSelfSizing: Bool

A Boolean value that indicates whether the input view is responsible for its own size.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Custom keyboards

Add an extension to your Xcode project to provide systemwide customized text input.

class UIInputViewController

The primary view controller for a custom keyboard app extension.

class UILexicon

A read-only array of term pairs, each in a lexicon entry object, for a custom keyboard.

class UILexiconEntry

A read-only term pair, available within a lexicon object, for a custom keyboard.

protocol UITextDocumentProxy

An object that provides textual context to a custom keyboard.


https://developer.apple.com/documentation/uikit/uilistcontentview


https://developer.apple.com/documentation/uikit/uipopoverbackgroundview

  • UIKit
  • UIPopoverBackgroundView

Class

UIPopoverBackgroundView

The background appearance for a popover.

tvOS

@MainActor class UIPopoverBackgroundView

Overview

This class must be subclassed before it can be used. The implementation of your subclass is responsible for providing the border decoration and arrow for the popover. Subclasses must override all declared properties and methods to provide information about where to lay out the corresponding popover content and arrow. Subclasses must also provide implementations for all methods of the UIPopoverBackgroundViewMethods protocol.

Subclassing notes

Your subclass is responsible for providing the background visual styling of the popover, which includes the arrow and appropriately styled border. The popover controller places the actual popover content on top of your background view to finish the popovers presentation.

The background contents of your view should be based on stretchable images. Because the popover is animated into place (and may require animated transitions), using images is the only way to ensure that the animations are smooth and not jittery. By creating images that can be stretched at appropriate places, your popover can still be resized and adjusted as needed. You can then incorporate those images using UIImageView subviews or Core Animation layers. When the size of the popover changes (perhaps to accommodate the keyboard), all you have to do is adjust the frame rectangles of your embedded image views.

In addition to providing the background content, your subclass must implement the arrowOffset and arrowDirection properties and the methods in the UIPopoverBackgroundViewMethods protocol. The popover controller uses these methods and properties to get and set information related to your background view. The protocol methods are called once and the values you return should never change. However, the values in the arrowOffset and arrowDirection properties can change while your popover is on the screen, so your setter methods should call setNeedsLayout() when that happens to update the background image views or layers.

To create a stretchable image, use the resizableImage(withCapInsets:) method of UIImage.

Topics

Accessing the arrow metrics

var arrowOffset: CGFloat

The distance (measured in points) from the center of the view to the center line of the arrow.

var arrowDirection: UIPopoverArrowDirection

The direction in which the popover arrow is pointing.

Controlling the popover appearance

class var wantsDefaultContentAppearance: Bool

Determines whether the default content appearance should be used for the popover.

Deprecated

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverBackgroundViewMethods
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Popovers

Displaying transient content in a popover

Show a temporary interface on top of your apps content on iPad.

class UIPopoverPresentationController

An object that manages the display of content in a popover.

protocol UIPopoverBackgroundViewMethods

A set of methods that popover background view subclasses must implement.


https://developer.apple.com/documentation/uikit/uistandardtextcursorview

  • UIKit
  • UIStandardTextCursorView

Class

UIStandardTextCursorView

A view that draws the standard system insertion point in a piece of text.

@MainActor class UIStandardTextCursorView

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITextCursorView
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Custom text selection

Adopting system selection UI in custom text views

Incorporate the system text-selection experience into your custom text UI in UIKit.

class UITextSelectionDisplayInteraction

An object that provides the system UI for displaying text selection.

protocol UITextSelectionHighlightView

An interface you use to provide a custom highlight UI behind the selected text.

protocol UITextSelectionHandleView

An interface you use to draw custom the selection handles for ranges of text.

protocol UITextCursorView

An interface you use to draw the insertion point in a piece of text.

class UITextCursorDropPositionAnimator

class UITextLoupeSession

An object that manages the presentation of the system magnifier at the location you specify.


https://developer.apple.com/documentation/uikit/uitableviewcell

  • UIKit
  • UITableViewCell

Class

UITableViewCell

The visual representation of a single row in a table view.

tvOS

@MainActor class UITableViewCell

Mentioned in

Filling a table with data

Configuring the cells for your table

Adding user-focusable elements to a tvOS app

Overview

A UITableViewCell object is a specialized type of view that manages the content of a single table row. You use cells primarily to organize and present your apps custom content, but UITableViewCell provides some specific customizations to support table-related behaviors, including:

  • Applying a selection or highlight color to the cell

  • Adding standard accessory views, such as a detail or disclosure control

  • Putting the cell into an editable state

  • Indenting the cells content to create a visual hierarchy in your table

Your apps content occupies most of the cells bounds, but the cell may adjust that space to make room for other content. Cells display accessory views on the trailing edge of their content area. When you put your table into edit mode, the cell adds a delete control to the leading edge of its content area, and optionally swaps out an accessory view for a reorder control.

Every table view must have at least one type of cell for displaying content, and tables may have multiple cell types to display different types of content. Your tables data source object handles the creation and configuration of cells immediately before they appear onscreen. For information about how to create your tables cells, see Filling a table with data.

Configure your cells content

Configure the content and layout of your cells in your storyboard file. Tables have one cell type by default, but you can add more by changing the value in the tables Prototype Cells attribute. In addition to configuring the cells content, make sure you configure the following attributes:

  • Identifier. Use this identifier (also known as a reuse identifier) to create the cell.

  • Style. Choose one of the standard types or define a custom cell.

  • Class. Specify a UITableViewCell subclass with your custom behavior.

To configure the content and appearance of your cell, you can set its contentConfiguration and backgroundConfiguration.

Topics

Creating a table view cell

init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)

Initializes a table cell with a style and a reuse identifier and returns it to the caller.

enum CellStyle

An enumeration for the various styles of cells.

init?(coder: NSCoder)

Creates a table view from data in an unarchiver.

Reusing cells

var reuseIdentifier: String?

A string for identifying a reusable cell.

func prepareForReuse()

Prepares a reusable cell for reuse by the table views delegate.

Configuring the background

Retrieves a background configuration with system default values.

var backgroundConfiguration: UIBackgroundConfiguration?

The current background configuration of the cell.

var automaticallyUpdatesBackgroundConfiguration: Bool

A Boolean value that determines whether the cell automatically updates its background configuration when its state changes.

var backgroundView: UIView?

The view to use as the background of the cell.

var selectedBackgroundView: UIView?

The view to use as the background for a selected cell.

var multipleSelectionBackgroundView: UIView?

The background view to use for a selected cell when the table view allows multiple row selections.

Managing the content

Retrieves a default list content configuration for the cells style.

var contentConfiguration: (any UIContentConfiguration)?

The current content configuration of the cell.

var automaticallyUpdatesContentConfiguration: Bool

A Boolean value that determines whether the cell automatically updates its content configuration when its state changes.

var contentView: UIView

The content view of the cell object.

Managing the state

var configurationState: UICellConfigurationState

The current configuration state of the cell.

func setNeedsUpdateConfiguration()

Informs the cell to update its configuration for its current state.

func updateConfiguration(using: UICellConfigurationState)

Updates the cells configuration using the current state.

var configurationUpdateHandler: UITableViewCell.ConfigurationUpdateHandler?

A block for handling updates to the cells configuration using the current state.

typealias ConfigurationUpdateHandler

The type of block for handling updates to the cells configuration using the current state.

Managing accessory views

var accessoryType: UITableViewCell.AccessoryType

The type of standard accessory view for the cell to use in the table views normal state.

var accessoryView: UIView?

The view to use on the right side of the cell, typically as a control, in the table views normal state.

var editingAccessoryType: UITableViewCell.AccessoryType

The type of standard accessory view for the cell to use in the table views editing state.

var editingAccessoryView: UIView?

The view to use on the right side of the cell, typically as a control, in the table views editing state.

enum AccessoryType

The type of standard accessory control used by a cell.

Managing cell selection and highlighting

var selectionStyle: UITableViewCell.SelectionStyle

The style of selection for a cell.

enum SelectionStyle

The style of selected cells.

var isSelected: Bool

A Boolean value that indicates whether the cell is selected.

func setSelected(Bool, animated: Bool)

Sets the selected state of the cell, optionally animating the transition between states.

var isHighlighted: Bool

A Boolean value that indicates whether the cell is highlighted.

func setHighlighted(Bool, animated: Bool)

Sets the highlighted state of the cell, optionally animating the transition between states.

Editing the cell

var isEditing: Bool

A Boolean value that indicates whether the cell is in an editable state.

func setEditing(Bool, animated: Bool)

Toggles the cell into and out of editing mode.

var editingStyle: UITableViewCell.EditingStyle

The editing style of the cell.

enum EditingStyle

The editing control used by a cell.

var showingDeleteConfirmation: Bool

A Boolean value that indicates whether the cell is currently showing the delete-confirmation button.

var showsReorderControl: Bool

A Boolean value that determines whether the cell shows the reordering control.

Dragging the row

var userInteractionEnabledWhileDragging: Bool

A Boolean value indicating whether users can interact with a cell while it is being dragged.

func dragStateDidChange(UITableViewCell.DragState)

Notifies the cell that its drag status changed.

enum DragState

Constants indicating the current state of a row involved in a drag operation.

Adjusting to state transitions

func willTransition(to: UITableViewCell.StateMask)

Notifies the cell that its about to transition to a new cell state.

func didTransition(to: UITableViewCell.StateMask)

Notifies the cell that it transitioned to a new cell state.

struct StateMask

Constants used to determine the new state of a cell as it transitions between states.

Managing content indentation

var indentationLevel: Int

The indentation level of the cells content.

var indentationWidth: CGFloat

The width for each level of indentation of a cells content.

var shouldIndentWhileEditing: Bool

A Boolean value that controls whether the cell background is indented when the table view is in editing mode.

var separatorInset: UIEdgeInsets

The inset values for the separator line drawn beneath the cell.

enum SeparatorStyle

The style for cells to use as separators.

Managing focus

var focusStyle: UITableViewCell.FocusStyle

The appearance of the cell when focused.

enum FocusStyle

The style of focused cells.

Deprecated

var textLabel: UILabel?

The label to use for the main textual content of the table cell.

Deprecated

var detailTextLabel: UILabel?

The secondary label of the table cell, if one exists.

var imageView: UIImageView?

The image view of the table cell.

Relationships

Inherits From

  • UIView

Conforms To

  • CALayerDelegate
  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol
  • NSTouchBarProvider
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIActivityItemsConfigurationProviding
  • UIAppearance
  • UIAppearanceContainer
  • UICoordinateSpace
  • UIDynamicItem
  • UIFocusEnvironment
  • UIFocusItem
  • UIFocusItemContainer
  • UIGestureRecognizerDelegate
  • UILargeContentViewerItem
  • UIPasteConfigurationSupporting
  • UIPopoverPresentationControllerSourceItem
  • UIResponderStandardEditActions
  • UITraitChangeObservable
  • UITraitEnvironment
  • UIUserActivityRestoring

See Also

Cells, headers, and footers

Specify the appearance and content of your tables rows by defining one or more prototype cells in your storyboard.

Creating self-sizing table view cells

Create table view cells that support Dynamic Type and use system spacing constraints to adjust the spacing surrounding text labels.

Adding headers and footers to table sections

Differentiate groups of rows visually by adding header and footer views to your table views sections.

class UITableViewHeaderFooterView

A reusable view that you place at the top or bottom of a table section to display additional information for that section.


https://developer.apple.com/documentation/uikit/uitableviewheaderfooterview


https://developer.apple.com/documentation/uikit/uiaccessibilityidentification

  • UIKit
  • UIAccessibilityIdentification

Protocol

UIAccessibilityIdentification

Methods that associate a unique identifier with elements in your user interface.

iOSiPadOSMac CatalysttvOSvisionOS

protocol UIAccessibilityIdentification : NSObjectProtocol

Overview

You can use the identifiers you define in UI Automation scripts because the value of accessibilityIdentifier corresponds to the return value of the name method of UIAElement.

Topics

Accessing an element identifier

var accessibilityIdentifier: String?

A string that identifies the element.

Required

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIAccessibilityElement
  • UIAction
  • UIActionSheet
  • UIActivityIndicatorView
  • UIAlertAction
  • UIAlertView
  • UIBackgroundExtensionView
  • UIBarButtonItem
  • UIBarItem
  • UIButton
  • UICalendarView
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewListCell
  • UIColorWell
  • UICommand
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDeferredMenuElement
  • UIEventAttributionView
  • UIImage
  • UIImageView
  • UIInputView
  • UIKeyCommand
  • UILabel
  • UIListContentView
  • UIMenu
  • UIMenuElement
  • UINavigationBar
  • UIPageControl
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchTab
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITab
  • UITabBar
  • UITabBarItem
  • UITabGroup
  • UITableView
  • UITableViewCell
  • UITableViewHeaderFooterView
  • UITextField
  • UITextView
  • UIToolbar
  • UIView
  • UIVisualEffectView
  • UIWebView
  • UIWindow
  • UIWindowScene.ActivationAction

See Also

Behaviors

UIAccessibilityFocus

An informal protocol that provides a way to determine whether an assistive app, such as VoiceOver, has focus on an accessible element.

protocol UIAccessibilityReadingContent

Methods to implement for an object that represents content that users read, such as a book or an article.

protocol UIAccessibilityContentSizeCategoryImageAdjusting

Methods to determine when to adjust images for different content size categories.

struct UIAccessibilityTextualContext

Constants that describe a named context that helps identify and classify the type of text inside an element.


https://developer.apple.com/documentation/uikit/uiappearance

  • UIKit
  • UIAppearance

Protocol

UIAppearance

A collection of methods that gives you access to the appearance proxy for a class.

iOSiPadOSMac CatalysttvOSvisionOS

@MainActor protocol UIAppearance : NSObjectProtocol

Overview

You can customize the appearance of instances of a class by sending appearance-modification messages to the classs appearance proxy.

There are two ways to customize appearance for objects: for all instances, and for instances contained within an instance of a container class.

To customize the appearance of all instances of a class, use appearance() to get the appearance proxy for the class. For example, to modify the bar background tint color for all instances of UINavigationBar:

UINavigationBar.appearance().barTintColor = navBarTintColor

To customize the appearances for instances of a class when contained within an instance of a container class, or instances in a hierarchy, use appearanceWhenContainedIn: to get the appearance proxy for the class. For example, to modify the appearance of bar buttons, based on the object that contains the navigation bar:

let navigationBarAppearance = UINavigationBar.appearance(whenContainedInInstancesOf: [UINavigationController.self]) navigationBarAppearance.setBackgroundImage(navBarBackgroundImage, for: .any, barMetrics: .default)

let barButtonNavigationBarAppearance = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]) barButtonNavigationBarAppearance.setBackgroundImage(barButtonNavBarImage, for: .normal, barMetrics: .default)

let barButtonToolbarAppearance = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIToolbar.self]) barButtonToolbarAppearance.setBackgroundImage(barButtonToolbarImage, for: .normal, barMetrics: .default)

In any given view hierarchy, the outermost appearance proxy wins. Specificity (depth of the chain) is the tie-breaker. In other words, the containment statement in appearanceWhenContainedIn: is treated as a partial ordering. Given a concrete ordering (actual subview hierarchy), UIKit selects the partial ordering thats the first unique match when reading the actual hierarchy from the window down.

You can further refine which instances of a class will have their appearance customized by specifying a trait collection. Use the appearance(for:) and appearanceForTraitCollection:whenContainedIn: methods to retrieve the proxy for a class with the specified trait collection.

To support appearance customization, a class must conform to the UIAppearanceContainer protocol and relevant accessor methods must be marked with UI_APPEARANCE_SELECTOR.

Topics

Working with the appearance proxy

Returns the appearance proxy for the receiver.

Required

Returns the appearance proxy for the receiver that has the passed trait collection.

Returns the appearance proxy for the object when its contained in the hierarchy the specified classes describe.

Returns the appearance proxy for the object when its contained in the hierarchy the specified classes describe and has the specified trait collection.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIActionSheet
  • UIActivityIndicatorView
  • UIAlertView
  • UIBackgroundExtensionView
  • UIBarButtonItem
  • UIBarItem
  • UIButton
  • UICalendarView
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewListCell
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIEventAttributionView
  • UIImageView
  • UIInputView
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UIPageControl
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarItem
  • UITableView
  • UITableViewCell
  • UITableViewHeaderFooterView
  • UITextField
  • UITextView
  • UIToolbar
  • UIView
  • UIVisualEffectView
  • UIWebView
  • UIWindow

See Also

Appearance proxies

protocol UIAppearanceContainer

A protocol that a class must adopt to allow appearance customization using the UIAppearance API.


https://developer.apple.com/documentation/uikit/uiappearancecontainer


https://developer.apple.com/documentation/uikit/uicoordinatespace

  • UIKit
  • UICoordinateSpace

Protocol

UICoordinateSpace

A set of methods for converting between different frames of reference on a screen.

iOSiPadOStvOSvisionOSwatchOS

@MainActor protocol UICoordinateSpace : NSObjectProtocol

Overview

The UIView class adopts this protocol so that you can convert easily between most coordinate spaces in your app. The UIScreen class includes the coordinateSpace and fixedCoordinateSpace properties, which give you access to the screens coordinate spaces. You can adopt this protocol in your own classes to convert between your custom coordinate spaces and the coordinate spaces of your apps views and screens.

In iOS 8 and later, window and screen coordinate spaces arent fixed to a specific device orientation. Instead, window and screen coordinates change to match the apps interface orientation, which typically (but not always) matches the current device orientation. (View controllers still determine which interface orientations the app supports.) Rotating the window and screen simplifies the interactions between views, windows, and the screen. In cases where you still need a fixed frame of reference — for example, because you need to store the location of a touch event or onscreen item persistently — you can use the methods of this protocol to convert coordinate values to the fixed coordinate space provided by the UIScreen object.

To convert a point from a views current coordinate space to the screens fixed coordinate space, use code similar to the following:

[myView convertPoint:point toCoordinateSpace:myView.window.screen.fixedCoordinateSpace];

When implementing the methods of this protocol, you must convert coordinate values to or from your local coordinate space. When performing such conversions, use the screen coordinate space as an intermediate coordinate space, converting to screen coordinates before converting to the target coordinate space. For example, when converting from your local coordinate space to the coordinate space of another view, convert your local coordinates to the screen coordinate space first and then convert those screen coordinates to the coordinate space of the view.

Topics

Getting the bounds rectangle

var bounds: CGRect

The bounds rectangle describing the items location and size in its own coordinate system.

Required

Converting between coordinate spaces

Converts a point from the coordinate space of the current object to the specified coordinate space.

Converts a point from the specified coordinate space to the coordinate space of the current object.

Converts a rectangle from the coordinate space of the current object to the specified coordinate space.

Converts a rectangle from the specified coordinate space to the coordinate space of the current object.

Relationships

Inherits From

  • NSObjectProtocol

Inherited By

  • UITextCursorView
  • UITextSelectionHandleView
  • UITextSelectionHighlightView

Conforming Types

  • UIActionSheet
  • UIActivityIndicatorView
  • UIAlertView
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewListCell
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIEventAttributionView
  • UIImageView
  • UIInputView
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UIPageControl
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITableView
  • UITableViewCell
  • UITableViewHeaderFooterView
  • UITextField
  • UITextView
  • UIToolbar
  • UIView
  • UIVisualEffectView
  • UIWebView
  • UIWindow

See Also

Windows

class UIWindow

The backdrop for your apps user interface and the object that dispatches events to your views.


https://developer.apple.com/documentation/uikit/uidynamicitem


https://developer.apple.com/documentation/uikit/uifocusenvironment

  • UIKit
  • UIFocusEnvironment

Protocol

UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

@MainActor protocol UIFocusEnvironment : NSObjectProtocol

Overview

The UIFocusEnvironment protocol provides a common interface for specifying and reacting to focus behavior throughout your app. Classes in UIKit that conform to this protocol include UIView, UIViewController, UIWindow, and UIPresentationController — in other words, classes that are either directly or indirectly in control of views on the screen.

Topics

Requesting focus update

func setNeedsFocusUpdate()

Submits a request to the focus engine for a focus update in this environment.

Required

func updateFocusIfNeeded()

Tells the focus engine to force a focus update immediately.

Validating focus movements

Returns a Boolean value indicating whether the focus engine should allow the focus update described by the specified context to occur.

Responding to focus updates

func didUpdateFocus(in: UIFocusUpdateContext, with: UIFocusAnimationCoordinator)

Called immediately after the system updates the focus to a new view.

Controlling user-generated focus movements

var preferredFocusEnvironments: [any UIFocusEnvironment]

An array of focus environments, ordered by priority, to which this environment prefers focus to be directed during a focus update.

var preferredFocusedView: UIView?

Specifies the view that should be focused if this environment is focused.

Deprecated

Getting the sound to play during updates

Using custom sounds for focus movement

Customize the sounds users hear when focus moves.

Asks the delegate for the identifier of the sound to play when the object gains focus.

struct UIFocusSoundIdentifier

An identifier for a focus-related sound.

Checking the ancestry of the environment

Returns a Boolean value that indicates whether the focus environment contains the specified environment.

var parentFocusEnvironment: (any UIFocusEnvironment)?

The parent focus environment for this environment.

var focusItemContainer: (any UIFocusItemContainer)?

The container for the child focus items in this focus environment.

Identifying the focus group

var focusGroupIdentifier: String?

The identifier of the focus group that the environment belongs to.

Relationships

Inherits From

  • NSObjectProtocol

Inherited By

  • UIFocusItem

Conforming Types

  • UIActionSheet
  • UIActivityIndicatorView
  • UIActivityViewController
  • UIAlertController
  • UIAlertView
  • UIBackgroundExtensionView
  • UIButton
  • UICalendarView
  • UICloudSharingController
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewController
  • UICollectionViewListCell
  • UIColorPickerViewController
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIDocumentBrowserViewController
  • UIDocumentMenuViewController
  • UIDocumentPickerExtensionViewController
  • UIDocumentPickerViewController
  • UIDocumentViewController
  • UIEventAttributionView
  • UIFontPickerViewController
  • UIImagePickerController
  • UIImageView
  • UIInputView
  • UIInputViewController
  • UILabel
  • UIListContentView
  • UINavigationBar
  • UINavigationController
  • UIPageControl
  • UIPageViewController
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIPopoverPresentationController
  • UIPresentationController
  • UIProgressView
  • UIReferenceLibraryViewController
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchContainerViewController
  • UISearchController
  • UISearchTextField
  • UISegmentedControl
  • UISheetPresentationController
  • UISlider
  • UISplitViewController
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITabBar
  • UITabBarController
  • UITableView
  • UITableViewCell
  • UITableViewController
  • UITableViewHeaderFooterView
  • UITextField
  • UITextFormattingViewController
  • UITextView
  • UIToolbar
  • UIVideoEditorController
  • UIView
  • UIViewController
  • UIVisualEffectView
  • UIWebView
  • UIWindow

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uifocusitem


https://developer.apple.com/documentation/uikit/uifocusitemcontainer


https://developer.apple.com/documentation/uikit/uipopoverpresentationcontrollersourceitem

  • UIKit
  • UIPopoverPresentationControllerSourceItem

Protocol

UIPopoverPresentationControllerSourceItem

A type that can be an anchor for a popover presentation controller.

protocol UIPopoverPresentationControllerSourceItem : NSObjectProtocol

Topics

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • NSUIViewToolbarItem
  • UIActionSheet
  • UIActivityIndicatorView
  • UIAlertView
  • UIBackgroundExtensionView
  • UIBarButtonItem
  • UIButton
  • UICalendarView
  • UICollectionReusableView
  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewListCell
  • UIColorWell
  • UIContentUnavailableView
  • UIControl
  • UIDatePicker
  • UIEventAttributionView
  • UIFocusGuide
  • UIImageView
  • UIInputView
  • UIKeyboardLayoutGuide
  • UILabel
  • UILayoutGuide
  • UIListContentView
  • UINavigationBar
  • UIPageControl
  • UIPasteControl
  • UIPickerView
  • UIPopoverBackgroundView
  • UIProgressView
  • UIRefreshControl
  • UIScrollView
  • UISearchBar
  • UISearchTab
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UIStackView
  • UIStandardTextCursorView
  • UIStepper
  • UISwitch
  • UITab
  • UITabBar
  • UITabBarItem
  • UITabGroup
  • UITableView
  • UITableViewCell
  • UITableViewHeaderFooterView
  • UITextField
  • UITextView
  • UIToolbar
  • UITrackingLayoutGuide
  • UIView
  • UIVisualEffectView
  • UIWebView
  • UIWindow

See Also

Specifying the popovers anchor point

var sourceItem: (any UIPopoverPresentationControllerSourceItem)?

The item on which to anchor the popover.

var sourceView: UIView?

The view containing the anchor rectangle for the popover.

var sourceRect: CGRect

The area in the source view in which you anchor the popover.

var barButtonItem: UIBarButtonItem?

The bar button item on which to anchor the popover.

Deprecated


https://developer.apple.com/documentation/uikit/customizing-drawings)


https://developer.apple.com/documentation/uikit/implementing-a-multi-touch-app)


https://developer.apple.com/documentation/uikit/making-a-view-into-a-drag-source)


https://developer.apple.com/documentation/uikit/uiview/clipstobounds)


https://developer.apple.com/documentation/uikit/uiview/frame)


https://developer.apple.com/documentation/uikit/uiview/bounds)


https://developer.apple.com/documentation/uikit/uiview/addsubview(_:))


https://developer.apple.com/documentation/uikit/uiview/insertsubview(_:abovesubview:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/insertsubview(_:belowsubview:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/exchangesubview(at:withsubviewat:))


https://developer.apple.com/documentation/uikit/uiview/draw(_:))


https://developer.apple.com/documentation/uikit/uiview/setneedsdisplay())


https://developer.apple.com/documentation/uikit/uiview/setneedsdisplay(_:))


https://developer.apple.com/documentation/uikit/uiview/center)


https://developer.apple.com/documentation/uikit/uiview/transform)


https://developer.apple.com/documentation/uikit/uiview/alpha)


https://developer.apple.com/documentation/uikit/uiview/backgroundcolor)


https://developer.apple.com/documentation/uikit/uiviewpropertyanimator)


https://developer.apple.com/documentation/uikit/uiviewpropertyanimator).


https://developer.apple.com/documentation/uikit/uiview),


https://developer.apple.com/documentation/uikit/uiview/init(frame:))


https://developer.apple.com/documentation/uikit/uiview/layerclass)


https://developer.apple.com/documentation/uikit/uiview/draw(_:for:))


https://developer.apple.com/documentation/uikit/uiview/requiresconstraintbasedlayout)


https://developer.apple.com/documentation/uikit/uiview/updateconstraints())


https://developer.apple.com/documentation/uikit/uiview/alignmentrect(forframe:)),


https://developer.apple.com/documentation/uikit/uiview/frame(foralignmentrect:))


https://developer.apple.com/documentation/uikit/uiview/didaddsubview(_:)),


https://developer.apple.com/documentation/uikit/uiview/willremovesubview(_:))


https://developer.apple.com/documentation/uikit/uiview/willmove(tosuperview:)),


https://developer.apple.com/documentation/uikit/uiview/didmovetosuperview())


https://developer.apple.com/documentation/uikit/uiview/gesturerecognizershouldbegin(_:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiresponder/touchesbegan(_:with:)),


https://developer.apple.com/documentation/uikit/uiresponder/touchesmoved(_:with:)),


https://developer.apple.com/documentation/uikit/uiresponder/touchesended(_:with:)),


https://developer.apple.com/documentation/uikit/uiresponder/touchescancelled(_:with:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/addconstraint(_:))


https://developer.apple.com/documentation/uikit/uiview/autoresizingmask-swift.property)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/contentmode-swift.property)


https://developer.apple.com/documentation/uikit/uiview/ishidden)


https://developer.apple.com/documentation/uikit/uiview/init(coder:))


https://developer.apple.com/documentation/uikit/uiview/isopaque)


https://developer.apple.com/documentation/uikit/uiview/tintcolor)


https://developer.apple.com/documentation/uikit/uiview/tintadjustmentmode-swift.property)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/clearscontextbeforedrawing)


https://developer.apple.com/documentation/uikit/uiview/mask)


https://developer.apple.com/documentation/uikit/uiview/layer)


https://developer.apple.com/documentation/uikit/uiview/isuserinteractionenabled)


https://developer.apple.com/documentation/uikit/uiview/ismultipletouchenabled)


https://developer.apple.com/documentation/uikit/uiview/isexclusivetouch)


https://developer.apple.com/documentation/uikit/uiview/transform3d)


https://developer.apple.com/documentation/uikit/uiview/anchorpoint)


https://developer.apple.com/documentation/uikit/uiview/superview)


https://developer.apple.com/documentation/uikit/uiview/subviews)


https://developer.apple.com/documentation/uikit/uiview/window)


https://developer.apple.com/documentation/uikit/uiview/bringsubviewtofront(_:))


https://developer.apple.com/documentation/uikit/uiview/sendsubviewtoback(_:))


https://developer.apple.com/documentation/uikit/uiview/removefromsuperview())


https://developer.apple.com/documentation/uikit/uiview/insertsubview(_:at:))


https://developer.apple.com/documentation/uikit/uiview/isdescendant(of:))


https://developer.apple.com/documentation/uikit/uiview/didaddsubview(_:))


https://developer.apple.com/documentation/uikit/uiview/willmove(tosuperview:))


https://developer.apple.com/documentation/uikit/uiview/willmove(towindow:))


https://developer.apple.com/documentation/uikit/uiview/didmovetowindow())


https://developer.apple.com/documentation/uikit/uiview/updatetraitsifneeded())


https://developer.apple.com/documentation/uikit/uiview/traitoverrides-fd9z)


https://developer.apple.com/documentation/uikit/uitraitoverrides-swift.struct)


https://developer.apple.com/documentation/uikit/positioning-content-within-layout-margins)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/directionallayoutmargins)


https://developer.apple.com/documentation/uikit/uiview/layoutmargins)


https://developer.apple.com/documentation/uikit/uiview/preservessuperviewlayoutmargins)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/layoutmarginsdidchange())


https://developer.apple.com/documentation/uikit/positioning-content-relative-to-the-safe-area)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/safeareainsets)


https://developer.apple.com/documentation/uikit/uiview/safearealayoutguide)


https://developer.apple.com/documentation/uikit/uiview/safeareainsetsdidchange())


https://developer.apple.com/documentation/uikit/uiview/insetslayoutmarginsfromsafearea)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/constraints)


https://developer.apple.com/documentation/uikit/uiview/addconstraints(_:))


https://developer.apple.com/documentation/uikit/uiview/removeconstraint(_:))


https://developer.apple.com/documentation/uikit/uiview/removeconstraints(_:))


https://developer.apple.com/documentation/uikit/uiview/bottomanchor)


https://developer.apple.com/documentation/uikit/uiview/centerxanchor)


https://developer.apple.com/documentation/uikit/uiview/centeryanchor)


https://developer.apple.com/documentation/uikit/uiview/firstbaselineanchor)


https://developer.apple.com/documentation/uikit/uiview/heightanchor)


https://developer.apple.com/documentation/uikit/uiview/lastbaselineanchor)


https://developer.apple.com/documentation/uikit/uiview/leadinganchor)


https://developer.apple.com/documentation/uikit/uiview/leftanchor)


https://developer.apple.com/documentation/uikit/uiview/rightanchor)


https://developer.apple.com/documentation/uikit/uiview/topanchor)


https://developer.apple.com/documentation/uikit/uiview/trailinganchor)


https://developer.apple.com/documentation/uikit/uiview/widthanchor)


https://developer.apple.com/documentation/uikit/uiview/addlayoutguide(_:))


https://developer.apple.com/documentation/uikit/uiview/layoutguides)


https://developer.apple.com/documentation/uikit/uiview/layoutmarginsguide)


https://developer.apple.com/documentation/uikit/uiview/readablecontentguide)


https://developer.apple.com/documentation/uikit/uiview/removelayoutguide(_:))


https://developer.apple.com/documentation/uikit/uiview/systemlayoutsizefitting(_:))


https://developer.apple.com/documentation/uikit/uiview/systemlayoutsizefitting(_:withhorizontalfittingpriority:verticalfittingpriority:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/intrinsiccontentsize)


https://developer.apple.com/documentation/uikit/uiview/invalidateintrinsiccontentsize())

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/contentcompressionresistancepriority(for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/setcontentcompressionresistancepriority(_:for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/contenthuggingpriority(for:))


https://developer.apple.com/documentation/uikit/uiview/setcontenthuggingpriority(_:for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/alignmentrect(forframe:))


https://developer.apple.com/documentation/uikit/uiview/alignmentrectinsets)


https://developer.apple.com/documentation/uikit/uiview/forfirstbaselinelayout)


https://developer.apple.com/documentation/uikit/uiview/forlastbaselinelayout)


https://developer.apple.com/documentation/uikit/uiview/needsupdateconstraints())


https://developer.apple.com/documentation/uikit/uiview/setneedsupdateconstraints())


https://developer.apple.com/documentation/uikit/uiview/updateconstraintsifneeded())


https://developer.apple.com/documentation/uikit/uiview/constraintsaffectinglayout(for:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/hasambiguouslayout)


https://developer.apple.com/documentation/uikit/uiview/exerciseambiguityinlayout())


https://developer.apple.com/documentation/uikit/uiview/contentmode-swift.enum)


https://developer.apple.com/documentation/uikit/uiview/sizethatfits(_:))


https://developer.apple.com/documentation/uikit/uiview/sizetofit())


https://developer.apple.com/documentation/uikit/uiview/autoresizessubviews)


https://developer.apple.com/documentation/uikit/uiview/layoutsubviews())


https://developer.apple.com/documentation/uikit/uiview/setneedslayout())


https://developer.apple.com/documentation/uikit/uiview/layoutifneeded())


https://developer.apple.com/documentation/uikit/uiview/translatesautoresizingmaskintoconstraints)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/layoutregion)


https://developer.apple.com/documentation/uikit/uiview/directionaledgeinsets(for:))


https://developer.apple.com/documentation/uikit/uiview/edgeinsets(for:))


https://developer.apple.com/documentation/uikit/uiview/layoutguide(for:))


https://developer.apple.com/documentation/uikit/uiview/overrideuserinterfacestyle)


https://developer.apple.com/documentation/uikit/uiview/semanticcontentattribute)


https://developer.apple.com/documentation/uikit/uiview/effectiveuserinterfacelayoutdirection)


https://developer.apple.com/documentation/uikit/uiview/userinterfacelayoutdirection(for:))


https://developer.apple.com/documentation/uikit/uiview/userinterfacelayoutdirection(for:relativeto:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/keyboardlayoutguide)


https://developer.apple.com/documentation/uikit/uiview/addinteraction(_:))


https://developer.apple.com/documentation/uikit/uiview/removeinteraction(_:))


https://developer.apple.com/documentation/uikit/uiview/interactions)


https://developer.apple.com/documentation/uikit/uiinteraction)


https://developer.apple.com/documentation/uikit/uiview/contentscalefactor)


https://developer.apple.com/documentation/uikit/uiview/tintcolordidchange())


https://developer.apple.com/documentation/uikit/uiview/invalidating)


https://developer.apple.com/documentation/uikit/uiviewinvalidating)


https://developer.apple.com/documentation/uikit/uiview/viewprintformatter())


https://developer.apple.com/documentation/uikit/uiview/addgesturerecognizer(_:))


https://developer.apple.com/documentation/uikit/uiview/removegesturerecognizer(_:))


https://developer.apple.com/documentation/uikit/uiview/gesturerecognizers)


https://developer.apple.com/documentation/uikit/uiview/canbecomefocused)


https://developer.apple.com/documentation/uikit/uiview/inheritedanimationduration)


https://developer.apple.com/documentation/uikit/uiview/isfocused)


https://developer.apple.com/documentation/uikit/uiview/focusgroupidentifier)


https://developer.apple.com/documentation/uikit/uiview/focuseffect)


https://developer.apple.com/documentation/uikit/uiview/focusgrouppriority)


https://developer.apple.com/documentation/uikit/uiview/addmotioneffect(_:))


https://developer.apple.com/documentation/uikit/uiview/motioneffects)


https://developer.apple.com/documentation/uikit/uiview/removemotioneffect(_:))


https://developer.apple.com/documentation/uikit/uiview/hoverstyle)


https://developer.apple.com/documentation/uikit/uihoverstyle)


https://developer.apple.com/documentation/uikit/uihovereffectlayer)


https://developer.apple.com/documentation/uikit/uiview/minimumcontentsizecategory)


https://developer.apple.com/documentation/uikit/uiview/maximumcontentsizecategory)


https://developer.apple.com/documentation/uikit/uiview/appliedcontentsizecategorylimitsdescription)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/restorationidentifier)


https://developer.apple.com/documentation/uikit/uiview/encoderestorablestate(with:))


https://developer.apple.com/documentation/uikit/uiview/decoderestorablestate(with:))


https://developer.apple.com/documentation/uikit/uiview/snapshotview(afterscreenupdates:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/resizablesnapshotview(from:afterscreenupdates:withcapinsets:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/drawhierarchy(in:afterscreenupdates:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/tag)


https://developer.apple.com/documentation/uikit/uiview/viewwithtag(_:))


https://developer.apple.com/documentation/uikit/uiview/convert(_:to:)-1xizt)


https://developer.apple.com/documentation/uikit/uiview/convert(_:from:)-8neo1)


https://developer.apple.com/documentation/uikit/uiview/convert(_:to:)-2kf3d)


https://developer.apple.com/documentation/uikit/uiview/convert(_:from:)-7irzk)


https://developer.apple.com/documentation/uikit/uiview/hittest(_:with:))


https://developer.apple.com/documentation/uikit/uiview/point(inside:with:))


https://developer.apple.com/documentation/uikit/uiview/endediting(_:))


https://developer.apple.com/documentation/uikit/uiview/accessibilityignoresinvertcolors)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/largecontentimage)


https://developer.apple.com/documentation/uikit/uiview/largecontentimageinsets)


https://developer.apple.com/documentation/uikit/uiview/largecontenttitle)


https://developer.apple.com/documentation/uikit/uiview/scaleslargecontentimage)


https://developer.apple.com/documentation/uikit/uiview/showslargecontentviewer)


https://developer.apple.com/documentation/uikit/uiview/animate(springduration:bounce:initialspringvelocity:delay:options:animations:completion:))


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:delay:options:animations:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:animations:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:animations:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/transition(with:duration:options:animations:completion:))


https://developer.apple.com/documentation/uikit/uiview/transition(from:to:duration:options:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/animatekeyframes(withduration:delay:options:animations:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/addkeyframe(withrelativestarttime:relativeduration:animations:))


https://developer.apple.com/documentation/uikit/uiview/perform(_🔛options:animations:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/animate(withduration:delay:usingspringwithdamping:initialspringvelocity:options:animations:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/performwithoutanimation(_:))


https://developer.apple.com/documentation/uikit/uiview/modifyanimations(withrepeatcount:autoreverses:animations:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/animationcurve)


https://developer.apple.com/documentation/uikit/uiview/animationoptions)


https://developer.apple.com/documentation/uikit/uiview/animationtransition)


https://developer.apple.com/documentation/uikit/uiview/systemanimation)


https://developer.apple.com/documentation/uikit/uiview/keyframeanimationoptions)


https://developer.apple.com/documentation/uikit/nslayoutconstraint/axis)


https://developer.apple.com/documentation/uikit/uiview/tintadjustmentmode-swift.enum)


https://developer.apple.com/documentation/uikit/uiview/layoutfittingcompressedsize)


https://developer.apple.com/documentation/uikit/uiview/layoutfittingexpandedsize)


https://developer.apple.com/documentation/uikit/uiview/nointrinsicmetric)


https://developer.apple.com/documentation/uikit/uiview/autoresizingmask-swift.struct)


https://developer.apple.com/documentation/uikit/uisemanticcontentattribute)


https://developer.apple.com/documentation/uikit/uiview-deprecated-symbols)


https://developer.apple.com/documentation/uikit/uiview/init())


https://developer.apple.com/documentation/uikit/uiview/setneedsupdateproperties())


https://developer.apple.com/documentation/uikit/uiview/updateproperties())


https://developer.apple.com/documentation/uikit/uiview/updatepropertiesifneeded())


https://developer.apple.com/documentation/uikit/uiview/animate(_:changes:completion:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiview/invalidations)


https://developer.apple.com/documentation/uikit/uibackgroundextensionview)


https://developer.apple.com/documentation/uikit/uicollectionreusableview)


https://developer.apple.com/documentation/uikit/uiinputview)


https://developer.apple.com/documentation/uikit/uilistcontentview)


https://developer.apple.com/documentation/uikit/uipopoverbackgroundview)


https://developer.apple.com/documentation/uikit/uistandardtextcursorview)


https://developer.apple.com/documentation/uikit/uitableviewcell)


https://developer.apple.com/documentation/uikit/uitableviewheaderfooterview)


https://developer.apple.com/documentation/uikit/uiaccessibilityidentification)


https://developer.apple.com/documentation/uikit/uiappearance)


https://developer.apple.com/documentation/uikit/uiappearancecontainer)


https://developer.apple.com/documentation/uikit/uicoordinatespace)


https://developer.apple.com/documentation/uikit/uidynamicitem)


https://developer.apple.com/documentation/uikit/uifocusenvironment)


https://developer.apple.com/documentation/uikit/uifocusitem)


https://developer.apple.com/documentation/uikit/uifocusitemcontainer)


https://developer.apple.com/documentation/uikit/uipopoverpresentationcontrollersourceitem)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/String:%20Any


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdidload()

#app-main)

  • UIKit
  • UIViewController
  • viewDidLoad()

Instance Method

viewDidLoad()

Called after the controllers view is loaded into memory.

tvOS

@MainActor func viewDidLoad()

Mentioned in

Displaying and managing views with a view controller

Making a view into a drag source

Customizing a document-based apps launch experience

Discussion

This method is called after the view controller has loaded its view hierarchy into memory. This method is called regardless of whether the view hierarchy was loaded from a nib file or created programmatically in the loadView() method. You usually override this method to perform additional initialization on views that were loaded from nib files.

See Also

Managing the view

var view: UIView!

The view that the controller manages.

var viewIfLoaded: UIView?

The view controllers view, or nil if the view isnt yet loaded.

var isViewLoaded: Bool

A Boolean value indicating whether the view is currently loaded into memory.

func loadView()

Creates the view that the controller manages.

func loadViewIfNeeded()

Loads the view controllers view if its not loaded yet.

var title: String?

A localized string that represents the view this controller manages.

var preferredContentSize: CGSize

The preferred size for the view controllers view.


https://developer.apple.com/documentation/uikit/uicolor

  • UIKit
  • UIColor

Class

UIColor

An object that stores color data and sometimes opacity.

tvOS

class UIColor

Mentioned in

Customizing drawings

Determining color values with color spaces

Understanding a drag item as a promise

Overview

Use color to customize your apps appearance, communicate status, and help people visualize data. To learn more about using color in your apps, see Human Interface Guidelines.

UIColor provides a list of class properties that create adaptable and fixed colors such as blue, green, purple, and more. UIColor also offers properties to specify system-provided colors for UI elements such as labels, text, and buttons. You can create color objects by specifying color component values such as RGB, hue, and saturation. You can also create colors from other color objects and even create a pattern-based color from an image.

Topics

Getting existing colors

Choose colors for UI elements such as labels, text, backgrounds, and links.

Define standard color objects for specific shades, such as red, blue, green, black, white, and more.

Load colors from asset catalogs and create colors from raw component values.

Applying the color to the drawing environment

Create custom colors and patterns for drawing in your app.

func set()

Sets the color of subsequent stroke and fill operations to the color that the receiver represents.

func setFill()

Sets the color of subsequent fill operations to the color that the receiver represents.

func setStroke()

Sets the color of subsequent stroke operations to the color that the receiver represents.

Getting the color information

Change the systems interpretation of a color value for display by selecting a color space.

var cgColor: CGColor

The Quartz color that corresponds to the color object.

var ciColor: CIColor

The Core Image color that corresponds to the color object.

Returns the components that form the color in the HSB color space.

Returns the components that form the color in the RGB color space.

Returns the grayscale components of the color.

var linearExposure: CGFloat

The linear brightness multiplier that was applied when generating this color. Colors created with an exposure by UIColor create CGColors that are tagged with a contentHeadroom value. While CGColors created without a contentHeadroom tag will return 0 from CGColorGetHeadroom, UIColors generated in a similar fashion return a linearExposure of 1.0.

Beta

var accessibilityName: String

A localized description of the color for accessibility attributes.

Resolving a dynamically generated color

Returns the version of the current color that results from the specified traits.

Working with color prominence

var prominence: UIColor.Prominence

Returns the version of the current color that results from applying the specified prominence.

enum Prominence

A type that indicates the prominence of a color in the interface.

Working with high dynamic range (HDR) colors

var standardDynamicRange: UIColor

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • Copyable
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSItemProviderReading
  • NSItemProviderWriting
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype

https://developer.apple.com/documentation/uikit/displaying-a-preferences-window).


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdidload())


https://developer.apple.com/documentation/uikit/uicolor)


https://developer.apple.com/documentation/uikit/uiswitch/preferredstyle

  • UIKit
  • UISwitch
  • preferredStyle

Instance Property

preferredStyle

The preferred display style for the switch.

@MainActor var preferredStyle: UISwitch.Style { get set }

Mentioned in

Displaying a checkbox in your Mac app built with Mac Catalyst

Choosing a user interface idiom for your Mac app

Discussion

Use this property to specify the display style that you prefer. If the style changes, the switch may generate a layout pass to update the display.

The default style is UISwitch.Style.automatic. For a list of styles, see UISwitch.Style.

See Also

Setting the display style

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

var style: UISwitch.Style

The display style for the switch.

enum Style

Styles that determine the appearance of the switch.

var title: String?

The title displayed next to a checkbox-style switch.


https://developer.apple.com/documentation/uikit/uiswitch/style-swift.enum/automatic

  • UIKit
  • UISwitch
  • UISwitch.Style
  • UISwitch.Style.automatic

Case

UISwitch.Style.automatic

A style indicating that the system chooses the appearance of the switch according to the current user interface idiom.

case automatic

Mentioned in

Displaying a checkbox in your Mac app built with Mac Catalyst

Discussion

The system chooses the UISwitch.Style.checkbox style when the user interface idiom is UIUserInterfaceIdiom.mac; otherwise, it chooses the UISwitch.Style.sliding style.

See Also

Styles

case checkbox

A style indicating that the switch appears as a Mac-style checkbox.

case sliding

A style indicating that the switch appears as an on/off slider.


https://developer.apple.com/documentation/uikit/uiswitch/style-swift.enum/checkbox

  • UIKit
  • UISwitch
  • UISwitch.Style
  • UISwitch.Style.checkbox

Case

UISwitch.Style.checkbox

A style indicating that the switch appears as a Mac-style checkbox.

case checkbox

Mentioned in

Choosing a user interface idiom for your Mac app

Displaying a checkbox in your Mac app built with Mac Catalyst

Discussion

This style is only available to Mac apps built with Mac Catalyst that use the UIUserInterfaceIdiom.mac idiom. For more information about the Mac idiom, see Choosing a user interface idiom for your Mac app.

See Also

Styles

case automatic

A style indicating that the system chooses the appearance of the switch according to the current user interface idiom.

case sliding

A style indicating that the switch appears as an on/off slider.


https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom/mac

  • UIKit
  • UIUserInterfaceIdiom
  • UIUserInterfaceIdiom.mac

Case

UIUserInterfaceIdiom.mac

An interface designed for the Mac.

case mac

Mentioned in

Choosing a user interface idiom for your Mac app

Displaying a checkbox in your Mac app built with Mac Catalyst

Discussion

This idiom is available to Mac apps built with Mac Catalyst. For more information, see Choosing a user interface idiom for your Mac app.

See Also

Idioms

case unspecified

An unspecified idiom.

case phone

An interface designed for iPhone and iPod touch.

case pad

An interface designed for iPad.

case tv

An interface designed for tvOS and Apple TV.

case carPlay

An interface designed for an in-car experience.

case vision

An interface designed for visionOS and Apple Vision Pro.


https://developer.apple.com/documentation/uikit/uiswitch/title

  • UIKit
  • UISwitch
  • title

Instance Property

title

The title displayed next to a checkbox-style switch.

@MainActor var title: String? { get set }

Mentioned in

Choosing a user interface idiom for your Mac app

Displaying a checkbox in your Mac app built with Mac Catalyst

Discussion

Set title only when the user interface idiom is UIUserInterfaceIdiom.mac; otherwise, a runtime exception occurs.

let showFavoritesAtTop = UISwitch() showFavoritesAtTop.preferredStyle = .checkbox if traitCollection.userInterfaceIdiom == .mac { showFavoritesAtTop.title = "Always show favorite recipes at the top" }

The switch ignores title when the value of style isnt UISwitch.Style.checkbox.

See Also

Setting the display style

Present a switch control as a Mac-style checkbox when your app runs in the Mac user interface idiom.

var preferredStyle: UISwitch.Style

The preferred display style for the switch.

var style: UISwitch.Style

The display style for the switch.

enum Style

Styles that determine the appearance of the switch.


https://developer.apple.com/documentation/uikit/uiswitch/preferredstyle)


https://developer.apple.com/documentation/uikit/uiswitch/style-swift.enum/automatic)


https://developer.apple.com/documentation/uikit/uiswitch/style-swift.enum/checkbox).


https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom/mac)


https://developer.apple.com/documentation/uikit/choosing-a-user-interface-idiom-for-your-mac-app).

.#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiswitch/title)


https://developer.apple.com/documentation/uikit/uiresponder/pressesbegan(_:with:)

#app-main)

  • UIKit
  • UIResponder
  • pressesBegan(_:with:)

Instance Method

pressesBegan(_:with:)

Tells this object when a physical button is first pressed.

@MainActor func pressesBegan(

with event: UIPressesEvent? )

Parameters

presses

A set of UIPress instances that represent the new presses that occurred. The phase of each press is set to UIPress.Phase.began.

event

The event to which the presses belong.

Mentioned in

Handling key presses made on a physical keyboard

Discussion

UIKit calls this method when a new button is pressed by the user. Use this method to determine which button was pressed and to take any needed actions.

The default implementation of this method forwards the message up the responder chain. When creating your own subclasses, call super to forward any events that you dont handle yourself.

See Also

Responding to press events

Tells this object when a value associated with a press has changed.

Tells the object when a button is released.

Tells this object when a system event (such as a low-memory warning) cancels a press event.


https://developer.apple.com/documentation/uikit/uipress/key

  • UIKit
  • UIPress
  • key

Instance Property

key

The key pressed or released on a physical keyboard.

var key: UIKey? { get }

Mentioned in

Handling key presses made on a physical keyboard

Discussion

This property is nil when the press event isnt from a keyboard; for example, a button press on an Apple TV remote.

See Also

Getting press attributes

var type: UIPress.PressType

The type of the specified press.

var phase: UIPress.Phase

The current press phase of the object.

var timestamp: TimeInterval

The time when the press occurred or when it was last mutated.


https://developer.apple.com/documentation/uikit/uikey/charactersignoringmodifiers

  • UIKit
  • UIKey
  • charactersIgnoringModifiers

Instance Property

charactersIgnoringModifiers

A string that represents the text value of the key without modifier keys.

@MainActor var charactersIgnoringModifiers: String { get }

Mentioned in

Handling key presses made on a physical keyboard

Discussion

For Latin-based languages, always expect a lowercase property value. If the user is pressing only a modifier key, the property value is an empty string.

To check for special keys, compare charactersIgnoringModifiers to constants listed in Input strings for special keys.

See Also

Getting key characters

var characters: String

A string that represents the text value of the key combined with any active modifier keys.


https://developer.apple.com/documentation/uikit/uiresponder/pressesended(_:with:)

#app-main)

  • UIKit
  • UIResponder
  • pressesEnded(_:with:)

Instance Method

pressesEnded(_:with:)

Tells the object when a button is released.

@MainActor func pressesEnded(

with event: UIPressesEvent? )

Parameters

presses

A set of UIPress instances that represent the buttons that the user is no longer pressing. The phase of each press is set to UIPress.Phase.ended.

event

The event to which the presses belong.

Mentioned in

Handling key presses made on a physical keyboard

Discussion

UIKit calls this method when the user stops pressing one or more buttons. Use this method to take any needed actions in response to the end of the press.The default implementation of this method forwards the message up the responder chain. When creating your own subclasses, call super to forward any events that you dont handle yourself.

See Also

Responding to press events

Tells this object when a physical button is first pressed.

Tells this object when a value associated with a press has changed.

Tells this object when a system event (such as a low-memory warning) cancels a press event.


https://developer.apple.com/documentation/uikit/adding-hardware-keyboard-support-to-your-app

  • UIKit
  • Keyboards and input
  • Adding hardware keyboard support to your app

Sample Code

Adding hardware keyboard support to your app

Enhance interactions with your app by handling raw keyboard events, writing custom keyboard shortcuts, and working with gesture recognizers.

Download

Xcode 12.0+

Overview

See Also

Physical keyboards

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

class UIKey

An object that provides information about the state of a keyboard key.

enum UIKeyboardHIDUsage

A set of HID usage codes that identify the keys of a USB keyboard.


https://developer.apple.com/documentation/uikit/uikey

  • UIKit
  • UIKey

Class

UIKey

An object that provides information about the state of a keyboard key.

@MainActor class UIKey

Overview

UIKey provides relevant information about the current state of a key on a keyboard as a user presses and releases the key. To learn more, see Handling key presses made on a physical keyboard.

Topics

Determining key type

var keyCode: UIKeyboardHIDUsage

The HID usage code of the key.

var modifierFlags: UIKeyModifierFlags

The modifier keys pressed and held while the user presses the key.

Getting key characters

var characters: String

A string that represents the text value of the key combined with any active modifier keys.

var charactersIgnoringModifiers: String

A string that represents the text value of the key without modifier keys.

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • Sendable

See Also

Physical keyboards

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Adding hardware keyboard support to your app

Enhance interactions with your app by handling raw keyboard events, writing custom keyboard shortcuts, and working with gesture recognizers.

enum UIKeyboardHIDUsage

A set of HID usage codes that identify the keys of a USB keyboard.


https://developer.apple.com/documentation/uikit/uikeyboardhidusage

  • UIKit
  • UIKeyboardHIDUsage

Enumeration

UIKeyboardHIDUsage

A set of HID usage codes that identify the keys of a USB keyboard.

enum UIKeyboardHIDUsage

Topics

Alphabetical keys

case keyboardA

The raw usage code 4 (decimal)/04 (hexadecimal).

case keyboardB

The raw usage code 5 (decimal)/05 (hexadecimal).

case keyboardC

The raw usage code 6 (decimal)/06 (hexadecimal).

case keyboardD

The raw usage code 7 (decimal)/07 (hexadecimal).

case keyboardE

The raw usage code 8 (decimal)/08 (hexadecimal).

case keyboardF

The raw usage code 9 (decimal)/09 (hexadecimal).

case keyboardG

The raw usage code 10 (decimal)/0A (hexadecimal).

case keyboardH

The raw usage code 11 (decimal)/0B (hexadecimal).

case keyboardI

The raw usage code 12 (decimal)/0C (hexadecimal).

case keyboardJ

The raw usage code 13 (decimal)/0D (hexadecimal).

case keyboardK

The raw usage code 14 (decimal)/0E (hexadecimal).

case keyboardL

The raw usage code 15 (decimal)/0F (hexadecimal).

case keyboardM

The raw usage code 16 (decimal)/10 (hexadecimal).

case keyboardN

The raw usage code 17 (decimal)/11 (hexadecimal).

case keyboardO

The raw usage code 18 (decimal)/12 (hexadecimal).

case keyboardP

The raw usage code 19 (decimal)/13 (hexadecimal).

case keyboardQ

The raw usage code 20 (decimal)/14 (hexadecimal).

case keyboardR

The raw usage code 21 (decimal)/15 (hexadecimal).

case keyboardS

The raw usage code 22 (decimal)/16 (hexadecimal).

case keyboardT

The raw usage code 23 (decimal)/17 (hexadecimal).

case keyboardU

The raw usage code 24 (decimal)/18 (hexadecimal).

case keyboardV

The raw usage code 25 (decimal)/19 (hexadecimal).

case keyboardW

The raw usage code 26 (decimal)/1A (hexadecimal).

case keyboardX

The raw usage code 27 (decimal)/1B (hexadecimal).

case keyboardY

The raw usage code 28 (decimal)/1C (hexadecimal).

case keyboardZ

The raw usage code 29 (decimal)/1D (hexadecimal).

Numerical keys

case keyboard0

The raw usage code 39 (decimal)/27 (hexadecimal).

case keyboard1

The raw usage code 30 (decimal)/1E (hexadecimal).

case keyboard2

The raw usage code 31 (decimal)/1F (hexadecimal).

case keyboard3

The raw usage code 32 (decimal)/20 (hexadecimal).

case keyboard4

The raw usage code 33 (decimal)/21 (hexadecimal).

case keyboard5

The raw usage code 34 (decimal)/22 (hexadecimal).

case keyboard6

The raw usage code 35 (decimal)/23 (hexadecimal).

case keyboard7

The raw usage code 36 (decimal)/24 (hexadecimal).

case keyboard8

The raw usage code 37 (decimal)/25 (hexadecimal).

case keyboard9

The raw usage code 38 (decimal)/26 (hexadecimal).

Symbol keys

case keyboardBackslash

The raw usage code 49 (decimal)/31 (hexadecimal).

case keyboardCloseBracket

The raw usage code 48 (decimal)/30 (hexadecimal).

case keyboardComma

The raw usage code 54 (decimal)/36 (hexadecimal).

case keyboardEqualSign

The raw usage code 46 (decimal)/2E (hexadecimal).

case keyboardHyphen

The raw usage code 45 (decimal)/2D (hexadecimal).

case keyboardNonUSBackslash

The raw usage code 100 (decimal)/64 (hexadecimal).

case keyboardNonUSPound

The raw usage code 50 (decimal)/32 (hexadecimal).

case keyboardOpenBracket

The raw usage code 47 (decimal)/2F (hexadecimal).

case keyboardPeriod

The raw usage code 55 (decimal)/37 (hexadecimal).

case keyboardQuote

The raw usage code 52 (decimal)/34 (hexadecimal).

case keyboardSemicolon

The raw usage code 51 (decimal)/33 (hexadecimal).

case keyboardSeparator

The raw usage code 159 (decimal)/9F (hexadecimal).

case keyboardSlash

The raw usage code 56 (decimal)/38 (hexadecimal).

case keyboardSpacebar

The raw usage code 44 (decimal)/2C (hexadecimal).

Modifier keys

case keyboardCapsLock

The raw usage code 57 (decimal)/39 (hexadecimal).

case keyboardLeftAlt

The raw usage code 226 (decimal)/E2 (hexadecimal).

case keyboardLeftControl

The raw usage code 224 (decimal)/E0 (hexadecimal).

case keyboardLeftShift

The raw usage code 225 (decimal)/E1 (hexadecimal).

case keyboardLockingCapsLock

The raw usage code 130 (decimal)/82 (hexadecimal).

case keyboardLockingNumLock

The raw usage code 131 (decimal)/83 (hexadecimal).

case keyboardLockingScrollLock

The raw usage code 132 (decimal)/84 (hexadecimal).

case keyboardRightAlt

The raw usage code 230 (decimal)/E6 (hexadecimal).

case keyboardRightControl

The raw usage code 228 (decimal)/E4 (hexadecimal).

case keyboardRightShift

The raw usage code 229 (decimal)/E5 (hexadecimal).

case keyboardScrollLock

The raw usage code 71 (decimal)/47 (hexadecimal).

Navigation keys

case keyboardLeftArrow

The raw usage code 80 (decimal)/50 (hexadecimal).

case keyboardRightArrow

The raw usage code 79 (decimal)/4F (hexadecimal).

case keyboardUpArrow

The raw usage code 82 (decimal)/52 (hexadecimal).

case keyboardDownArrow

The raw usage code 81 (decimal)/51 (hexadecimal).

case keyboardPageUp

The raw usage code 75 (decimal)/4B (hexadecimal).

case keyboardPageDown

The raw usage code 78 (decimal)/4E (hexadecimal).

case keyboardHome

The raw usage code 74 (decimal)/4A (hexadecimal).

case keyboardEnd

The raw usage code 77 (decimal)/4D (hexadecimal).

case keyboardDeleteForward

The raw usage code 76 (decimal)/4C (hexadecimal).

case keyboardDeleteOrBackspace

The raw usage code 42 (decimal)/2A (hexadecimal).

case keyboardEscape

The raw usage code 41 (decimal)/29 (hexadecimal).

case keyboardInsert

The raw usage code 73 (decimal)/49 (hexadecimal).

case keyboardReturn

The raw usage code 158 (decimal)/9E (hexadecimal).

case keyboardTab

The raw usage code 43 (decimal)/2B (hexadecimal).

Function keys

case keyboardF1

The raw usage code 58 (decimal)/3A (hexadecimal).

case keyboardF2

The raw usage code 59 (decimal)/3B (hexadecimal).

case keyboardF3

The raw usage code 60 (decimal)/3C (hexadecimal).

case keyboardF4

The raw usage code 61 (decimal)/3D (hexadecimal).

case keyboardF5

The raw usage code 62 (decimal)/3E (hexadecimal).

case keyboardF6

The raw usage code 63 (decimal)/3F (hexadecimal).

case keyboardF7

The raw usage code 64 (decimal)/40 (hexadecimal).

case keyboardF8

The raw usage code 65 (decimal)/41 (hexadecimal).

case keyboardF9

The raw usage code 66 (decimal)/42 (hexadecimal).

case keyboardF10

The raw usage code 67 (decimal)/43 (hexadecimal).

case keyboardF11

The raw usage code 68 (decimal)/44 (hexadecimal).

case keyboardF12

The raw usage code 69 (decimal)/45 (hexadecimal).

case keyboardF13

The raw usage code 104 (decimal)/68 (hexadecimal).

case keyboardF14

The raw usage code 105 (decimal)/69 (hexadecimal).

case keyboardF15

The raw usage code 106 (decimal)/6A (hexadecimal).

case keyboardF16

The raw usage code 107 (decimal)/6B (hexadecimal).

case keyboardF17

The raw usage code 108 (decimal)/6C (hexadecimal).

case keyboardF18

The raw usage code 109 (decimal)/6D (hexadecimal).

case keyboardF19

The raw usage code 110 (decimal)/6E (hexadecimal).

case keyboardF20

The raw usage code 111 (decimal)/6F (hexadecimal).

case keyboardF21

The raw usage code 112 (decimal)/70 (hexadecimal).

case keyboardF22

The raw usage code 113 (decimal)/71 (hexadecimal).

case keyboardF23

The raw usage code 114 (decimal)/72 (hexadecimal).

case keyboardF24

The raw usage code 115 (decimal)/73 (hexadecimal).

Keypad keys

case keypad0

The raw usage code 98 (decimal)/62 (hexadecimal).

case keypad1

The raw usage code 89 (decimal)/59 (hexadecimal).

case keypad2

The raw usage code 90 (decimal)/5A (hexadecimal).

case keypad3

The raw usage code 91 (decimal)/5B (hexadecimal).

case keypad4

The raw usage code 92 (decimal)/5C (hexadecimal).

case keypad5

The raw usage code 93 (decimal)/5D (hexadecimal).

case keypad6

The raw usage code 94 (decimal)/5E (hexadecimal).

case keypad7

The raw usage code 95 (decimal)/5F (hexadecimal).

case keypad8

The raw usage code 96 (decimal)/60 (hexadecimal).

case keypad9

The raw usage code 97 (decimal)/61 (hexadecimal).

case keypadAsterisk

The raw usage code 85 (decimal)/55 (hexadecimal).

case keypadComma

The raw usage code 133 (decimal)/85 (hexadecimal).

case keypadEnter

The raw usage code 88 (decimal)/58 (hexadecimal).

case keypadEqualSign

The raw usage code 103 (decimal)/67 (hexadecimal).

case keypadEqualSignAS400

The raw usage code 134 (decimal)/86 (hexadecimal).

case keypadHyphen

The raw usage code 86 (decimal)/56 (hexadecimal).

case keypadNumLock

The raw usage code 83 (decimal)/53 (hexadecimal).

case keypadPeriod

The raw usage code 99 (decimal)/63 (hexadecimal).

case keypadPlus

The raw usage code 87 (decimal)/57 (hexadecimal).

case keypadSlash

The raw usage code 84 (decimal)/54 (hexadecimal).

Media keys

case keyboardPause

The raw usage code 72 (decimal)/48 (hexadecimal).

case keyboardStop

The raw usage code 120 (decimal)/78 (hexadecimal).

case keyboardMute

The raw usage code 127 (decimal)/7F (hexadecimal).

case keyboardVolumeUp

The raw usage code 128 (decimal)/80 (hexadecimal).

case keyboardVolumeDown

The raw usage code 129 (decimal)/81 (hexadecimal).

Input method keys

static var keyboardKanaSwitch: UIKeyboardHIDUsage

An alias for the LANG1 key on Japanese language keyboards from Apple.

static var keyboardHangul: UIKeyboardHIDUsage

An alias for the LANG1 key on Korean language keyboards.

static var keyboardAlphanumericSwitch: UIKeyboardHIDUsage

An alias for the LANG2 key on Japanese language keyboards from Apple.

static var keyboardHanja: UIKeyboardHIDUsage

An alias for the LANG2 key on Korean language keyboards.

static var keyboardKatakana: UIKeyboardHIDUsage

An alias for the LANG3 key on Japanese language keyboards.

static var keyboardHiragana: UIKeyboardHIDUsage

An alias for the LANG4 key on Japanese language keyboards.

static var keyboardZenkakuHankakuKanji: UIKeyboardHIDUsage

An alias for the LANG5 key on Japanese language keyboards.

case keyboardLANG1

The raw usage code 144 (decimal)/90 (hexadecimal).

case keyboardLANG2

The raw usage code 145 (decimal)/91 (hexadecimal).

case keyboardLANG3

The raw usage code 146 (decimal)/92 (hexadecimal).

case keyboardLANG4

The raw usage code 147 (decimal)/93 (hexadecimal).

case keyboardLANG5

The raw usage code 148 (decimal)/94 (hexadecimal).

case keyboardLANG6

The raw usage code 149 (decimal)/95 (hexadecimal).

case keyboardLANG7

The raw usage code 150 (decimal)/96 (hexadecimal).

case keyboardLANG8

The raw usage code 151 (decimal)/97 (hexadecimal).

case keyboardLANG9

The raw usage code 152 (decimal)/98 (hexadecimal).

case keyboardInternational1

The raw usage code 135 (decimal)/87 (hexadecimal).

case keyboardInternational2

The raw usage code 136 (decimal)/88 (hexadecimal).

case keyboardInternational3

The raw usage code 137 (decimal)/89 (hexadecimal).

case keyboardInternational4

The raw usage code 138 (decimal)/8A (hexadecimal).

case keyboardInternational5

The raw usage code 139 (decimal)/8B (hexadecimal).

case keyboardInternational6

The raw usage code 140 (decimal)/8C (hexadecimal).

case keyboardInternational7

The raw usage code 141 (decimal)/8D (hexadecimal).

case keyboardInternational8

The raw usage code 142 (decimal)/8E (hexadecimal).

case keyboardInternational9

The raw usage code 143 (decimal)/8F (hexadecimal).

Error keys

case keyboardErrorRollOver

The raw usage code 1 (decimal)/01 (hexadecimal).

case keyboardErrorUndefined

The raw usage code 3 (decimal)/03 (hexadecimal).

Other keys

case keyboardAgain

The raw usage code 121 (decimal)/79 (hexadecimal).

case keyboardAlternateErase

The raw usage code 153 (decimal)/99 (hexadecimal).

case keyboardApplication

The raw usage code 101 (decimal)/65 (hexadecimal).

case keyboardCancel

The raw usage code 155 (decimal)/9B (hexadecimal).

case keyboardClear

The raw usage code 156 (decimal)/9C (hexadecimal).

case keyboardClearOrAgain

The raw usage code 162 (decimal)/A2 (hexadecimal).

case keyboardCopy

The raw usage code 124 (decimal)/7C (hexadecimal).

case keyboardCrSelOrProps

The raw usage code 163 (decimal)/A3 (hexadecimal).

case keyboardCut

The raw usage code 129 (decimal)/7B (hexadecimal).

case keyboardExSel

The raw usage code 164 (decimal)/A4 (hexadecimal).

case keyboardExecute

The raw usage code 116 (decimal)/74 (hexadecimal).

case keyboardFind

The raw usage code 126 (decimal)/7E (hexadecimal).

case keyboardGraveAccentAndTilde

The raw usage code 53 (decimal)/35 (hexadecimal).

case keyboardHelp

The raw usage code 117 (decimal)/75 (hexadecimal).

case keyboardLeftGUI

The raw usage code 227 (decimal)/E3 (hexadecimal).

case keyboardMenu

The raw usage code 118 (decimal)/76 (hexadecimal).

case keyboardOper

The raw usage code 161 (decimal)/A1 (hexadecimal).

case keyboardOut

The raw usage code 160 (decimal)/A0 (hexadecimal).

case keyboardPOSTFail

The raw usage code 2 (decimal)/02 (hexadecimal).

case keyboardPaste

The raw usage code 125 (decimal)/7D (hexadecimal).

case keyboardPower

The raw usage code 102 (decimal)/66 (hexadecimal).

case keyboardPrintScreen

The raw usage code 70 (decimal)/46 (hexadecimal).

case keyboardPrior

The raw usage code 157 (decimal)/9D (hexadecimal).

case keyboardReturnOrEnter

The raw usage code 40 (decimal)/28 (hexadecimal).

case keyboardRightGUI

The raw usage code 231 (decimal)/E7 (hexadecimal).

case keyboardSelect

The raw usage code 119 (decimal)/77 (hexadecimal).

case keyboardSysReqOrAttention

The raw usage code 154 (decimal)/9A (hexadecimal).

case keyboardUndo

The raw usage code 122 (decimal)/7A (hexadecimal).

case keyboard_Reserved

The raw usage code 65535 (decimal)/FFFF (hexadecimal).

Initializers

init?(rawValue: CFIndex)

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Physical keyboards

Handling key presses made on a physical keyboard

Detect when someone presses and releases keys on a physical keyboard.

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Adding hardware keyboard support to your app

Enhance interactions with your app by handling raw keyboard events, writing custom keyboard shortcuts, and working with gesture recognizers.

class UIKey

An object that provides information about the state of a keyboard key.


https://developer.apple.com/documentation/uikit/uiapplication),


https://developer.apple.com/documentation/uikit/using-responders-and-the-responder-chain-to-handle-events).

.#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiresponder/pressesbegan(_:with:))


https://developer.apple.com/documentation/uikit/uipress/key)


https://developer.apple.com/documentation/uikit/uikey/charactersignoringmodifiers)


https://developer.apple.com/documentation/uikit/uiresponder/pressesended(_:with:))


https://developer.apple.com/documentation/uikit/adding-hardware-keyboard-support-to-your-app)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uikey)


https://developer.apple.com/documentation/uikit/uikeyboardhidusage)


https://developer.apple.com/documentation/uikit/about-focus-interactions-for-apple-tv

  • UIKit
  • Focus-based navigation
  • About focus interactions for Apple TV

Article

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Overview

On iOS devices, a user interacts directly with the touchscreen. On Apple TV, a remote or other input device is used to control the interface indirectly. Focus refers to the effect onscreen of external, indirect user input from an input device. As the user navigates through the interface, the next focusable item in the direction in which the user is navigating becomes focused, which triggers a focus update. If the focused item is selectable, the user selects it with the remote. Certain items, such as tab bars, are automatically selected after a slight delay.

The UIKit framework supports focus-based interfaces only, and in most cases this behavior is automatically provided. For apps with custom user interface components, you need to implement custom focus behavior.

Understanding the focus engine

The system within UIKit that controls focus and focus movement is called the focus engine. The focus engine listens for incoming focus-movement events in your app. When an event comes in, the focus engine automatically determines the next focusable item and notifies your app. This creates a consistent user experience across apps, provides automatic support for all current and future input methods, and helps developers concentrate on implementing their apps unique behavior rather than defining or reinventing basic navigation.

Only the focus engine can explicitly update focus, meaning theres no API for directly setting the focused item or moving focus in a particular direction. The focus engine updates focus only when the user sends a movement event or when the system or the app requests an update. Keep the following focus behaviors in mind when creating your layout design:

Not all items are focusable. If an item isnt focusable, its ignored whenever focus is determined. Use the canBecomeFocused property to determine if an item is focusable.

Only a single item can have focus at any given time.

Users change focus by selecting a direction on the remote. UIKit then attempts to move the focus to a new user interface element in that direction. If the system finds another item that can accept focus in that direction, the found item gains focus. If no element is found in that direction, the currently focused item stays in focus and a movementDidFailNotification notification is broadcast.

Only the user can directionally change focus. Your app cant programmatically search for a new element in a given direction. Although you can change focus programmatically, there are restrictions on how focus may change. Focus should almost always be under user control. For example, if the contents of a table view changed and the original focus element no longer exists, its reasonable to have your app programmatically select a new item to be in focus.

Focus is managed by the focus environment. When a focus environment gains focus, it can either keep the focus or give that focus to one of its own child focus environments. The focus environment it selects is its preferred focus environment. If a child focus environment is chosen, the child focus environment can also choose whether to keep focus or pass it to one of its child focus environments. This process drills down until a focus environment accepts focus for itself. The root view controller of the window also participates in the focus process. The root view controllers preferredFocusEnvironments property is the first focus environment thats selected to gain focus.

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/adding-user-focusable-elements-to-a-tvos-app

  • UIKit
  • Focus-based navigation
  • Adding user-focusable elements to a tvOS app

Article

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

Overview

On Apple TV, people use a remote or game controller to navigate through interface elements like movie posters, apps, or buttons, highlighting each item as they come to it. The highlighted item is said to be focused or in focus. It appears elevated or otherwise distinct from other items. An item is considered focused when the user has highlighted it, but not selected it. The user moves focus by navigating through different UI items, which triggers a focus update.

Add focusable items to the view

In Xcode, search the Library pane for the item you want to add to your app, and drag it to your apps storyboard. Several UIKit elements are focusable by default, including buttons ( UIButton), text fields ( UITextField), and table cells ( UITableViewCell). The top-left item is in focus when your app launches. (In right-to-left languages, the top-right item is initially in focus.) You dont need to do anything to UIKit elements that are focusable by default. However, you can add SceneKit and SpriteKit nodes as focusable elements. To make a SceneKit or SpriteKit node focusable, set the focusBehavior property of the node to focusable, as shown below.

node.focusBehavior = .focusable

Design your layout in a grid pattern

The easiest way to ensure that focus moves between focusable items is to arrange the items in a grid pattern. Swiping on the remote triggers the focus engine—the system that controls focus and movement—to find all of the focusable items in the direction of the swipe. The first item found then becomes the newly focused item. The following image shows the items found by the focus engine when the user swipes right, and the resulting focused item.

The following image shows the items found by the focus engine when the user swipes down, and the resulting focused item.

When the focus engine doesnt find any items in the direction of the swipe, by default the focused item doesnt change, as shown in the following image.

When necessary, you can change the default behavior by using UIFocusGuide to redirect focus to other focusable items in the user interface.

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uifocussystem

  • UIKit
  • UIFocusSystem

Class

UIFocusSystem

Queries and reevaluates the currently focused item.

@MainActor class UIFocusSystem

Overview

Use a UIFocusSystem object to obtain the focus-related state for the objects of your app. You can get state information for your apps views, view controllers, windows, and other objects that adopt the UIFocusEnvironment protocol. The UIFocusSystem object lists the currently focused item, if any, for a window or view hierarchy. You can use it to force the system to update the focus state, and you can register custom sounds to be played during focus changes.

Topics

Getting a focus system object

init?(for: any UIFocusEnvironment)

Retrieves a focus system object that contains the state information for the specified object.

Deprecated

Retrieves the focus system for the specified environment.

Getting the currently focused item

var focusedItem: (any UIFocusItem)?

The item thats currently focused.

Managing focus updates

func requestFocusUpdate(to: any UIFocusEnvironment)

Submits a request to update the focus state of the specified object.

func updateFocusIfNeeded()

Forces the system to act on a pending focus update for the current environment.

Registering custom sounds

class func register(URL, forSoundIdentifier: UIFocusSoundIdentifier)

Registers the specified sound file with the focus engine.

class let animationCoordinatorUserInfoKey: String

Updates the animation coordinator.

class let didUpdateNotification: NSNotification.Name

The focus for the UI has been updated.

class let focusUpdateContextUserInfoKey: String

Updates the context key.

class let movementDidFailNotification: NSNotification.Name

The focus failed to move to another item.

Structures

struct DidUpdateMessage Beta

struct MovementDidFailMessage Beta

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uifocusupdatecontext

  • UIKit
  • UIFocusUpdateContext

Class

UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

@MainActor class UIFocusUpdateContext

Overview

Focus update context objects are ephemeral and are usually discarded after the update is finished. The UIFocus APIs create a single high-level software interface for controlling focus in apps that use focus-based input.

Topics

Locating focus direction

var previouslyFocusedView: UIView?

The view that was focused before the focus update.

var nextFocusedView: UIView?

The view that takes the focus after the focus update.

var focusHeading: UIFocusHeading

The heading in which the focus update is occurring.

struct UIFocusHeading

The general type of an event.

var previouslyFocusedItem: (any UIFocusItem)?

The item that was focused before the update.

var nextFocusedItem: (any UIFocusItem)?

The item to be focused after the update.

class let didUpdateNotification: NSNotification.Name

The focus for the UI has been updated.

class let movementDidFailNotification: NSNotification.Name

The focus failed to move to another item.

class let animationCoordinatorUserInfoKey: String

Updates the animation coordinator.

class let focusUpdateContextUserInfoKey: String

Updates the context key.

Relationships

Inherits From

  • NSObject

Inherited By

  • UICollectionViewFocusUpdateContext
  • UITableViewFocusUpdateContext

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uifocusmovementhint

  • UIKit
  • UIFocusMovementHint

Class

UIFocusMovementHint

Provides movement hint information for the focused item.

class UIFocusMovementHint

Topics

Moving focus

var movementDirection: CGVector

A vector representing how close focus is to moving to another item in the swiped direction.

Transforming a hint

var interactionTransform: CATransform3D

A 3D transform that contains the combined transformations of perspective, rotation, and translation.

var perspectiveTransform: CATransform3D

A 3D transform that represents a perspective matrix to be applied to match UIKit interaction hinting.

var rotation: CGVector

A vector to apply to a transform to match system interaction hinting.

var translation: CGVector

Relationships

Inherits From

  • NSObject

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uifocusitemscrollablecontainer

  • UIKit
  • UIFocusItemScrollableContainer

Protocol

UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.

@MainActor protocol UIFocusItemScrollableContainer : UIFocusItemContainer

Overview

The focus engine scrolls the container to keep items onscreen as they become focused. This is done by repeatedly setting contentOffset.

Topics

Retrieving the content size

var contentOffset: CGPoint

The current content offset for the scrollable container.

Required

var contentSize: CGSize

The total size of the content contained by this container.

var visibleSize: CGSize

The visible size of the scrollable container.

Relationships

Inherits From

  • NSObjectProtocol
  • UIFocusItemContainer

Conforming Types

  • UICollectionView
  • UIScrollView
  • UITableView
  • UITextView

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

struct UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.


https://developer.apple.com/documentation/uikit/uifocusgrouppriority

  • UIKit
  • UIFocusGroupPriority

Structure

UIFocusGroupPriority

The importance of an item within a focus group, used by the focus system to determine the groups primary item.

iOSiPadOSMac CatalysttvOSvisionOS

struct UIFocusGroupPriority

Topics

Constants

static let ignored: UIFocusGroupPriority

The lowest focus group priority, assigned by default.

static let previouslyFocused: UIFocusGroupPriority

The focus group priority of a previously focused item.

static let prioritized: UIFocusGroupPriority

The focus group priority that indicates an item is more important than others.

static let currentlyFocused: UIFocusGroupPriority

The focus group priority of the currently focused item, the highest possible priority.

Initializing a focus group priority

init(Int)

Creates a focus group priority with the specified value.

init(rawValue: Int)

Creates a focus group priority with the specified raw value.

Relationships

Conforms To

  • BitwiseCopyable
  • Equatable
  • Hashable
  • RawRepresentable
  • Sendable
  • SendableMetatype

See Also

Focus interactions

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

About focus interactions for Apple TV

Design and implement intuitive control schemes for menus and interactive user interface layouts.

Adding user-focusable elements to a tvOS app

Create intuitive and easily manipulated user-interactive controls for your tvOS app.

protocol UIFocusEnvironment

A set of methods that define the focus behavior for a branch of the view hierarchy.

class UIFocusSystem

Queries and reevaluates the currently focused item.

class UIFocusUpdateContext

An object that provides information relevant to a specific focus update from one view to another.

protocol UIFocusItem

An object that can become focused.

class UIFocusMovementHint

Provides movement hint information for the focused item.

protocol UIFocusItemContainer

The container responsible for providing geometric context to focus items within a given focus environment.

protocol UIFocusItemScrollableContainer

A type of focus item container that supports automatic scrolling of focusable content.


https://developer.apple.com/documentation/uikit/about-focus-interactions-for-apple-tv)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/adding-user-focusable-elements-to-a-tvos-app)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uifocussystem)


https://developer.apple.com/documentation/uikit/uifocusupdatecontext)


https://developer.apple.com/documentation/uikit/uifocusmovementhint)


https://developer.apple.com/documentation/uikit/uifocusitemscrollablecontainer)


https://developer.apple.com/documentation/uikit/uifocusgrouppriority)


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/altitudeangle

  • UIKit
  • UIHoverGestureRecognizer
  • altitudeAngle

Instance Property

altitudeAngle

A value that represents the altitude angle of the hovering pointing device.

@MainActor var altitudeAngle: CGFloat { get }

Discussion

This value is 0 for devices that dont support altitude.

See Also

Supporting Apple Pencil hover

A value that represents the azimuth angle of the hovering pointing device in the specified view.

A value that represents the azimuth unit vector of the hovering pointing device in the specified view.

var rollAngle: CGFloat

A value that represents the current barrel-roll angle of Apple Pencil.

var zOffset: CGFloat

A value that represents the normalized distance between the screen and a hovering pointing device, such as Apple Pencil.


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/azimuthangle(in:)

#app-main)

  • UIKit
  • UIHoverGestureRecognizer
  • azimuthAngle(in:)

Instance Method

azimuthAngle(in:)

A value that represents the azimuth angle of the hovering pointing device in the specified view.

@MainActor

Parameters

view

The view the angle is relative to.

Return Value

A CGFloat that represents the azimuth angle of the hovering pointing device.

Discussion

If the specified view is nil, the method returns the azimuth angle of the hovering pointing device in the gesture recognizers window.

This method returns 0 for devices that dont support azimuth.

See Also

Supporting Apple Pencil hover

var altitudeAngle: CGFloat

A value that represents the altitude angle of the hovering pointing device.

A value that represents the azimuth unit vector of the hovering pointing device in the specified view.

var rollAngle: CGFloat

A value that represents the current barrel-roll angle of Apple Pencil.

var zOffset: CGFloat

A value that represents the normalized distance between the screen and a hovering pointing device, such as Apple Pencil.


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/azimuthunitvector(in:)


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/rollangle

  • UIKit
  • UIHoverGestureRecognizer
  • rollAngle

Instance Property

rollAngle

A value that represents the current barrel-roll angle of Apple Pencil.

@MainActor var rollAngle: CGFloat { get }

Discussion

For models of Apple Pencil that dont support barrel-roll angle data, the value of this property is 0.

See Also

Supporting Apple Pencil hover

var altitudeAngle: CGFloat

A value that represents the altitude angle of the hovering pointing device.

A value that represents the azimuth angle of the hovering pointing device in the specified view.

A value that represents the azimuth unit vector of the hovering pointing device in the specified view.

var zOffset: CGFloat

A value that represents the normalized distance between the screen and a hovering pointing device, such as Apple Pencil.


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/zoffset

  • UIKit
  • UIHoverGestureRecognizer
  • zOffset

Instance Property

zOffset

A value that represents the normalized distance between the screen and a hovering pointing device, such as Apple Pencil.

@MainActor var zOffset: CGFloat { get }

Discussion

This value is 1 at the maximum distance from the screen and approaches 0 as the pointing device gets closer to the screen. This value is 0 for devices that dont support zOffset.

For example, a drawing app might use the value of this property to generate a preview that indicates where a hovering Apple Pencil touches down on an iPad screen. For more information, see Adopting hover support for Apple Pencil.

See Also

Supporting Apple Pencil hover

var altitudeAngle: CGFloat

A value that represents the altitude angle of the hovering pointing device.

A value that represents the azimuth angle of the hovering pointing device in the specified view.

A value that represents the azimuth unit vector of the hovering pointing device in the specified view.

var rollAngle: CGFloat

A value that represents the current barrel-roll angle of Apple Pencil.


https://developer.apple.com/documentation/uikit/uigesturerecognizer

  • UIKit
  • UIGestureRecognizer

Class

UIGestureRecognizer

The base class for concrete gesture recognizers.

tvOS

@MainActor class UIGestureRecognizer

Overview

A gesture recognizer decouples the logic for recognizing a sequence of touches (or other input) and acting on that recognition. When one of these objects recognizes a common gesture or, in some cases, a change in the gesture, it sends an action message to each designated target object.

The concrete subclasses of UIGestureRecognizer are the following:

  • UITapGestureRecognizer

  • UIPinchGestureRecognizer

  • UIRotationGestureRecognizer

  • UISwipeGestureRecognizer

  • UIPanGestureRecognizer

  • UIScreenEdgePanGestureRecognizer

  • UILongPressGestureRecognizer

  • UIHoverGestureRecognizer

The UIGestureRecognizer class defines a set of common behaviors that can be configured for all concrete gesture recognizers. It can also communicate with its delegate (an object that adopts the UIGestureRecognizerDelegate protocol), thereby enabling finer-grained customization of some behaviors.

A gesture recognizer operates on touches hit-tested to a specific view and all of that views subviews. It thus must be associated with that view. To make that association you must call the UIView method addGestureRecognizer(_:). A gesture recognizer doesnt participate in the views responder chain.

A gesture recognizer has one or more target-action pairs associated with it. If there are multiple target-action pairs, theyre discrete, and not cumulative. Recognition of a gesture results in the dispatch of an action message to a target for each of the associated pairs. The action methods invoked must conform to one of the following signatures:

@IBAction func myActionMethod() @IBAction func myActionMethod(_ sender: UIGestureRecognizer)

  • (IBAction)handleGesture;
  • (IBAction)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

Methods conforming to the latter signature permit the target in some cases to query the gesture recognizer sending the message for additional information. For example, the target could ask a UIRotationGestureRecognizer object for the angle of rotation (in radians) since the last invocation of the action method for this gesture. Clients of gesture recognizers can also ask for the location of a gesture by calling location(in:) or location(ofTouch:in:).

The gesture interpreted by a gesture recognizer can be either discrete or continuous. A discrete gesture, such as a double tap, occurs but once in a multi-touch sequence and results in a single action sent. However, when a gesture recognizer interprets a continuous gesture such as a rotation gesture, it sends an action message for each incremental change until the multi-touch sequence concludes.

A window delivers touch events to a gesture recognizer before it delivers them to the hit-tested view attached to the gesture recognizer. Generally, if a gesture recognizer analyzes the stream of touches in a multi-touch sequence and doesnt recognize its gesture, the view receives the full complement of touches. If a gesture recognizer recognizes its gesture, the remaining touches for the view are canceled. The usual sequence of actions in gesture recognition follows a path determined by default values of the cancelsTouchesInView, delaysTouchesBegan, delaysTouchesEnded properties:

  • cancelsTouchesInView — If a gesture recognizer recognizes its gesture, it unbinds the remaining touches of that gesture from their view (so the window wont deliver them). The window cancels the previously delivered touches with a ( touchesCancelled(_:with:)) message. If a gesture recognizer doesnt recognize its gesture, the view receives all touches in the multi-touch sequence.

  • delaysTouchesBegan — As long as a gesture recognizer, when analyzing touch events, hasnt failed recognition of its gesture, the window withholds delivery of touch objects in the UITouch.Phase.began phase to the attached view. If the gesture recognizer subsequently recognizes its gesture, the view doesnt receive these touch objects. If the gesture recognizer doesnt recognize its gesture, the window delivers these objects in an invocation of the views touchesBegan(_:with:) method (and possibly a follow-up touchesMoved(_:with:) invocation to inform it of the touches current location).

  • delaysTouchesEnded — As long as a gesture recognizer, when analyzing touch events, hasnt failed recognition of its gesture, the window withholds delivery of touch objects in the UITouch.Phase.ended phase to the attached view. If the gesture recognizer subsequently recognizes its gesture, the touches are canceled (in a touchesCancelled(_:with:) message). If the gesture recognizer doesnt recognize its gesture, the window delivers these objects in an invocation of the views touchesEnded(_:with:) method.

Note that “recognize” in the above descriptions doesnt necessarily equate to a transition to the Recognized state.

Subclassing notes

You may create a subclass of UIGestureRecognizer that recognizes a distinctive gesture — for example, a “check mark” gesture. If youre going to create such a concrete gesture recognizer, be sure to import the UIGestureRecognizerSubclass.h header file (for Objective-C) or the UIKit.UIGestureRecognizerSubclass module (for Swift). This file declares all the methods and properties a subclass must either override, call, or reset.

Gesture recognizers operate within a predefined state machine, transitioning to subsequent states as they handle multi-touch events. The states and their possible transitions differ for continuous and discrete gestures. All gesture recognizers begin a multi-touch sequence in the Possible state ( UIGestureRecognizer.State.possible). Discrete gestures transition from Possible to either Recognized ( recognized) or Failed ( UIGestureRecognizer.State.failed), depending on whether they successfully interpret the gesture or not. If the gesture recognizer transitions to Recognized, it sends its action message to its target.

For continuous gestures, the state transitions a gesture recognizer might make are more numerous, as indicated in the following sequence:

The Changed state is optional and may occur multiple times before the Cancelled or Ended state is reached. The gesture recognizer sends action messages at each state transition. Thus for a continuous gesture such as a pinch, action messages are sent as the two fingers move toward or away from each other. The enum constants representing these states are of type UIGestureRecognizer.State. (Note that the constants for Recognized and Ended states are synonymous.)

Subclasses must set the state property to the appropriate value when they transition between states.

Methods to override

The methods that subclasses must override are described in Implementing subclasses. Subclasses must also periodically reset the state property (as described above) and may call the ignore(_:for:) method.

Special considerations

The state property is declared in UIGestureRecognizer.h as being read-only. This property declaration is intended for clients of gesture recognizers. Subclasses of UIGestureRecognizer must import the UIGestureRecognizerSubclass.h header file (for Objective-C) or the UIKit.UIGestureRecognizerSubclass module (for Swift). This file contains a redeclaration of state that makes it read-write.

Topics

Initializing a gesture recognizer

init(target: Any?, action: Selector?)

Creates a gesture recognizer with a target and an action selector.

convenience init?(coder: NSCoder)

Creates a gesture recognizer from data in an unarchiver.

convenience init()

Creates a gesture recognizer.

var delegate: (any UIGestureRecognizerDelegate)?

The delegate of the gesture recognizer.

protocol UIGestureRecognizerDelegate

A set of methods implemented by the delegate of a gesture recognizer to fine-tune an apps gesture-recognition behavior.

Adding and removing targets and actions

func addTarget(Any, action: Selector)

Adds a target and an action to a gesture-recognizer object.

func removeTarget(Any?, action: Selector?)

Removes a target and an action from a gesture-recognizer object.

Getting the touches and location of a gesture

Returns the point computed as the location in a given view of the gesture represented by the gesture recognizer.

Returns the location of one of the gestures touches in the local coordinate system of a given view.

var numberOfTouches: Int

The number of touches involved in the gesture represented by the gesture recognizer.

Getting the recognizers state and view

var state: UIGestureRecognizer.State

The current state of the gesture recognizer.

enum State

Constants that represent the current state a gesture recognizer is in.

var view: UIView?

The view the gesture recognizer is attached to.

var isEnabled: Bool

A Boolean property that indicates whether the gesture recognizer is enabled.

var buttonMask: UIEvent.ButtonMask

A bit mask of the buttons in the gesture represented by the gesture recognizer.

var modifierFlags: UIKeyModifierFlags

The bit mask of modifier flags in the gesture represented by the gesture recognizer.

Canceling and delaying touches

var cancelsTouchesInView: Bool

A Boolean value that determines whether touches are delivered to a view when a gesture is recognized.

var delaysTouchesBegan: Bool

A Boolean value that determines whether the gesture recognizer delays sending touches in a begin phase to its view.

var delaysTouchesEnded: Bool

A Boolean value that determines whether the gesture recognizer delays sending touches in an end phase to its view.

Specifying dependencies between gesture recognizers

func require(toFail: UIGestureRecognizer)

Creates a dependency relationship between the gesture recognizer and another gesture recognizer when the objects are created.

Recognizing different gestures

var allowedPressTypes: [NSNumber]

An array of press types used to distinguish the type of button press.

var allowedTouchTypes: [NSNumber]

An array of touch types used to distinguish type of touches.

var requiresExclusiveTouchType: Bool

A Boolean value that indicates whether the gesture recognizer considers touches of different types simultaneously.

Debugging gesture recognizers

var name: String?

The unique name of the gesture recognizer.

Implementing subclasses

The UIKit.UIGestureRecognizerSubclass module (Swift) and UIGestureRecognizerSubclass.h header file (Objective-C) contain a class extension that declares methods intended to be called or overridden only by subclasses of UIGestureRecognizer. Clients that merely use concrete subclasses of UIGestureRecognizer must never call these methods (except for those noted).

Sent to the gesture recognizer when one or more fingers touch down in the associated view.

Sent to the gesture recognizer when one or more fingers move in the associated view.

Sent to the gesture recognizer when one or more fingers lift from the associated view.

Sent to the gesture recognizer when a system event (such as an incoming phone call) cancels a touch event.

Sent to the gesture recognizer when the estimated properties for a touch have changed so that they are no longer estimated, or an update is no longer expected.

func reset()

Overridden to reset internal state when a gesture recognition attempt completes.

func ignore(UITouch, for: UIEvent)

Tells the gesture recognizer to ignore a specific touch of the given event.

Overridden to indicate that the specified gesture recognizer can prevent the receiver from recognizing a gesture.

Overridden to indicate that the receiver can prevent the specified gesture recognizer from recognizing its gesture.

Overridden to indicate that the receiver requires the specified gesture recognizer to fail.

Overridden to indicate that the receiver should be required to fail by the specified gesture recognizer.

func ignore(UIPress, for: UIPressesEvent)

Tells the gesture recognizer to ignore a specific press of the given event.

Sent to the receiver when a physical button is pressed in the associated view.

Sent to the receiver when the force of the press has changed in the associated view.

Sent to the receiver when a button is released from the associated view.

Sent to the receiver when a system event (such as a low-memory warning) cancels a press event.

Relationships

Inherits From

  • NSObject

Inherited By

  • UIHoverGestureRecognizer
  • UILongPressGestureRecognizer
  • UIPanGestureRecognizer
  • UIPinchGestureRecognizer
  • UIRotationGestureRecognizer
  • UISwipeGestureRecognizer
  • UITapGestureRecognizer

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

Custom gestures

Discover when and how to build your own gesture recognizers.

Supporting gesture interaction in your apps

Enrich your apps user experience by supporting standard and custom gesture interaction.


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/altitudeangle)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/azimuthangle(in:))


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/azimuthunitvector(in:))

)#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/rollangle)


https://developer.apple.com/documentation/uikit/uihovergesturerecognizer/zoffset)


https://developer.apple.com/documentation/uikit/uigesturerecognizer)


https://developer.apple.com/documentation/uikit/uimenusystem

  • UIKit
  • UIMenuSystem

Class

UIMenuSystem

An object representing a main or contextual menu system.

@MainActor class UIMenuSystem

Overview

A menu system groups root menus together. The main system has only one root menu while the context system can have multiple root menus, each built in different UIResponder objects like a view controller.

Use UIMenuSystem in your implementation of buildMenu(with:) to isolate changes to a specific system.

override func buildMenu(with builder: UIMenuBuilder) { super.buildMenu(with: builder)

// Ensure that the builder is modifying the menu bar system. guard builder.system == UIMenuSystem.main else { return }

// ... }

You can also use a menu system to rebuild or revalidate menus as changes occur in your app. To rebuild a menu, call the setNeedsRebuild() method. Call setNeedsRevalidate() when you need the menu system to revalidate a menu.

For more information, see Adding menus and shortcuts to the menu bar and user interface.

Topics

Getting a menu system

class var main: UIMenuSystem

The main menu system.

class var context: UIMenuSystem

The context menu system.

Rebuilding a menu system

func setNeedsRebuild()

Tells the menu system to rebuild all of its menus.

Revalidating a menu system

func setNeedsRevalidate()

Tells the menu system to validate all of its menus.

Setting group preferences

enum ElementGroupPreference Beta

Relationships

Inherits From

  • NSObject

Inherited By

  • UIContextMenuSystem
  • UIMainMenuSystem

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSObjectProtocol
  • Sendable

See Also

App menus

class UIMenu

A container for grouping related menu elements in an app menu or contextual menu.

protocol UIMenuBuilder

An interface for adding and removing menus from a menu system.

class UIMainMenuSystem

Beta


https://developer.apple.com/documentation/uikit/uicontextmenuinteractiondelegate

  • UIKit
  • UIContextMenuInteractionDelegate

Protocol

UIContextMenuInteractionDelegate

The methods for providing the set of actions to perform on your content, and for customizing the preview of that content.

@MainActor protocol UIContextMenuInteractionDelegate : NSObjectProtocol

Mentioned in

Building a desktop-class iPad app

Overview

Use this protocol to provide UIKit with the contextual menu that you want to display. When a UIContextMenuInteraction object detects an appropriate interaction, it calls the contextMenuInteraction(_:configurationForMenuAtLocation:) method of your delegate. You use that method to specify the basic configuration details for your interface. In addition to your contextual menu, you can tell UIKit whether you want it to display a default preview interface or a custom view controller that you provide. You can also specify options for how you want UIKit to animate the presentation and dismissal of that interface.

For additional information about how to implement contextual menus, see Adding context menus in your app.

Topics

Providing the preview configuration data

Returns the configuration data to use when previewing the content.

Required

class UIContextMenuConfiguration

An object containing the configuration details for the contextual menu.

Customizing the preview animations

Asks the delegate for a preview of the item with the specified identifier when a context-menu interaction begins.

Asks the delegate for a preview of the item with the specified identifier when a context-menu interaction ends.

Adding menus and shortcuts to the menu bar and user interface

Provide quick access to useful actions by adding menus and keyboard shortcuts to your Mac app built with Mac Catalyst.

Responding to the menus appearance

func contextMenuInteraction(UIContextMenuInteraction, willPerformPreviewActionForMenuWith: UIContextMenuConfiguration, animator: any UIContextMenuInteractionCommitAnimating)

Informs the delegate when a preview action begins.

protocol UIContextMenuInteractionCommitAnimating

Methods adopted by system-supplied animator objects when committing preview-related animations.

Handling animations

func contextMenuInteraction(UIContextMenuInteraction, willDisplayMenuFor: UIContextMenuConfiguration, animator: (any UIContextMenuInteractionAnimating)?)

Informs the delegate when a menu display begins.

func contextMenuInteraction(UIContextMenuInteraction, willEndFor: UIContextMenuConfiguration, animator: (any UIContextMenuInteractionAnimating)?)

Informs the delegate when a menu display ends.

protocol UIContextMenuInteractionAnimating

Methods adopted by system-supplied animator objects when interacting with context menus.

Deprecated

Returns the source view to use when animating the appearance of the preview interface.

Deprecated

Returns the destination view to use when animating the appearance of the preview interface.

Relationships

Inherits From

  • NSObjectProtocol

Conforming Types

  • UIButton
  • UIColorWell
  • UIControl
  • UIDatePicker
  • UIPageControl
  • UIPasteControl
  • UIRefreshControl
  • UISearchTextField
  • UISegmentedControl
  • UISlider
  • UIStepper
  • UISwitch
  • UITextField

See Also

Contextual menus

class UIContextMenuSystem

The context menu system.

Beta

class UIContextMenuInteraction

An interaction object that you use to display relevant actions for your content.

class UITargetedPreview

An object describing the view to use during preview-related animations.

class UIPreviewTarget

An object that specifies the container view to use for animations.

class UIPreviewParameters

Additional parameters to use when animating a preview interface.


https://developer.apple.com/documentation/uikit/uimenusystem/main

  • UIKit
  • UIMenuSystem
  • main

Type Property

main

The main menu system.

@MainActor class var main: UIMenuSystem { get }

Discussion

In Mac apps built with Mac Catalyst, the main menu system is the apps menu bar.

See Also

Getting a menu system

class var context: UIMenuSystem

The context menu system.


https://developer.apple.com/documentation/uikit/uiresponder/buildmenu(with:)

#app-main)

  • UIKit
  • UIResponder
  • buildMenu(with:)

Instance Method

buildMenu(with:)

Asks the receiving responder to add and remove items from a menu system.

@MainActor func buildMenu(with builder: any UIMenuBuilder)

Parameters

builder

An object that you use to modify a menu system for your app.

Discussion

Override this method in your app delegate or view controller to receive a UIMenuBuilder object. Use the builder to add and remove UIMenuElement objects such as UIMenu, UIAction, and UICommand from your apps menu bar or context menus.

Where you override this method determines the menu system that the builder updates. To add and remove items from the menu bar using the main menu system, override buildMenu(with:) in your app delegate. To build a context menu using the context system, override this method in your view controller.

See Also

Building and validating commands

func validate(UICommand)

Asks the receiving responder to validate the command.

Requests the receiving responder to enable or disable the specified command in the user interface.

Returns the target object that responds to an action.


https://developer.apple.com/documentation/uikit/uimenubuilder

  • UIKit
  • UIMenuBuilder

Protocol

UIMenuBuilder

An interface for adding and removing menus from a menu system.

@MainActor protocol UIMenuBuilder

Mentioned in

Optimizing your iPad app for Mac

Overview

You dont create a menu builder object. Instead, you override buildMenu(with:) in your app delegate or view controller to receive a builder object. Where you override this method determines the system that the builder updates. To add and remove menus from the menu bar using the main menu system, override buildMenu(with:) in your app delegate. To build a context menu using the context system, override the method in your view controller.

To see an example of how to use a menu builder object, see Adding menus and shortcuts to the menu bar and user interface.

Topics

Getting menu systems and elements

var system: UIMenuSystem

The menu system that the menu builder modifies.

Required

Gets the menu for the specified menu identifier.

Gets the action for the specified action identifier.

Gets the command for the specified selector and property list.

Inserting child menus

func insertChild(UIMenu, atStartOfMenu: UIMenu.Identifier)

Adds a child menu as the first element of the specified parent menu.

func insertChild(UIMenu, atEndOfMenu: UIMenu.Identifier)

Adds a child menu as the last element of the specified parent menu.

Inserting sibling menus

func insertSibling(UIMenu, beforeMenu: UIMenu.Identifier)

Inserts a sibling menu before the specified menu.

func insertSibling(UIMenu, afterMenu: UIMenu.Identifier)

Inserts a sibling menu after the specified menu.

Replacing menus and child menu elements

Replaces the elements in a menu with the elements returned by the specified handler block.

Removing a menu

func remove(menu: UIMenu.Identifier)

Removes a menu from the menu system.

Instance Methods

func insertElements([UIMenuElement], afterAction: UIAction.Identifier)

Insert elements after an identified action.

Beta

func insertElements([UIMenuElement], afterCommand: Selector, propertyList: Any?)

func insertElements([UIMenuElement], afterMenu: UIMenu.Identifier)

Insert elements after an identified menu.

func insertElements([UIMenuElement], atEndOfMenu: UIMenu.Identifier)

Insert elements at the end of an identified parent menu.

func insertElements([UIMenuElement], atStartOfMenu: UIMenu.Identifier)

Insert elements at the start of an identified parent menu.

func insertElements([UIMenuElement], beforeAction: UIAction.Identifier)

Insert elements before an identified action.

func insertElements([UIMenuElement], beforeCommand: Selector, propertyList: Any?)

func insertElements([UIMenuElement], beforeMenu: UIMenu.Identifier)

Insert elements before an identified menu.

func remove(action: UIAction.Identifier)

Remove an identified action.

func remove(command: Selector, propertyList: Any?)

func replace(action: UIAction.Identifier, with: [UIMenuElement])

Replace an identified action with menu elements.

func replace(command: Selector, propertyList: Any?, with: [UIMenuElement])

func replace(menu: UIMenu.Identifier, with: [UIMenuElement])

Replace an identified menu with menu elements.

func replace(menu: UIMenu.Identifier, with: UIMenu)

Replace an identified menu with a menu.

See Also

App menus

class UIMenu

A container for grouping related menu elements in an app menu or contextual menu.

class UIMenuSystem

An object representing a main or contextual menu system.

class UIMainMenuSystem

The main menu system.


https://developer.apple.com/documentation/uikit/uiaction

  • UIKit
  • UIAction

Class

UIAction

A menu element that performs its action in a closure.

@MainActor class UIAction

Overview

Create a UIAction object when you want a menu element that performs its action in a closure. The following example adds an action-based menu to the File menu:

// Create a closure-based action to use as a menu element. let refreshAction = UIAction(title: "Refresh") { (action) in print("Refresh the data.") }

// Use the .displayInline option to avoid displaying the menu as a submenu, // and to separate it from the other menu elements using a line separator. let refreshMenuItem = UIMenu(title: "", options: .displayInline, children: [refreshAction])

// Insert the menu into the File menu before the Close menu. builder.insertSibling(refreshMenuItem, beforeMenu: .close)

Topics

Creating an action

convenience init(title: String, subtitle: String?, image: UIImage?, identifier: UIAction.Identifier?, discoverabilityTitle: String?, attributes: UIMenuElement.Attributes, state: UIMenuElement.State, handler: UIActionHandler)

Creates an action with the specified title, subtitle, image, identifier, discoverability title, attributes, state, and handler.

convenience init(title: String, image: UIImage?, identifier: UIAction.Identifier?, discoverabilityTitle: String?, attributes: UIMenuElement.Attributes, state: UIMenuElement.State, handler: UIActionHandler)

Creates an action with the specified title, image, identifier, discoverability title, attributes, state, and handler.

Creates an action for capturing text using the devices camera.

struct Identifier

A type that represents an action identifier.

typealias UIActionHandler

A type that defines the closure for an action handler.

Getting information about the action

var title: String

The actions title.

var image: UIImage?

The actions image.

var identifier: UIAction.Identifier

The unique identifier for the action.

var discoverabilityTitle: String?

An elaborated title that explains the purpose of the action.

var attributes: UIMenuElement.Attributes

The attributes indicating the style of the action.

var state: UIMenuElement.State

The state of the action.

var sender: Any?

The object responsible for the action handler.

Initializers

convenience init(title: String, subtitle: String?, image: UIImage?, selectedImage: UIImage?, identifier: UIAction.Identifier?, discoverabilityTitle: String?, attributes: UIMenuElement.Attributes, state: UIMenuElement.State, handler: UIActionHandler)

Relationships

Inherits From

  • UIMenuElement

Inherited By

  • UIWindowScene.ActivationAction

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIMenuLeaf

See Also

Menu elements and keyboard shortcuts

Adding menus and shortcuts to the menu bar and user interface

Provide quick access to useful actions by adding menus and keyboard shortcuts to your Mac app built with Mac Catalyst.

Adopting menus and UIActions in your user interface

Add menus to your user interface, with built-in button support and bar-button items, and create custom menu experiences.

class UIMenuElement

An object representing a menu, action, or command.

class UICommand

A menu element that performs its action in a selector.

class UIKeyCommand

An object that specifies a key press perform on a hardware keyboard and the resulting action.

class UIDeferredMenuElement

A placeholder menu element that the system replaces with the result of the blocks completion handler.

class Provider Beta

struct Attributes

Attributes that determine the style of the menu element.

enum State

Constants that indicate the state of an action- or command-based menu element.

protocol UIMenuLeaf

An interface for an object that represents a menu element without child elements.


https://developer.apple.com/documentation/uikit/uikeycommand

  • UIKit
  • UIKeyCommand

Class

UIKeyCommand

An object that specifies a key press perform on a hardware keyboard and the resulting action.

tvOS

@MainActor class UIKeyCommand

Mentioned in

Choosing a user interface idiom for your Mac app

Overview

Hardware keyboards allow a user to hold down the Control, Option, Command, or other modifier key and press another key in combination to initiate commands such as Cut, Copy, or Paste. You can use instances of this class to define custom command sequences that your app recognizes and then provide an appropriate response.

To use this class, you create instances and associate them with your apps responder objects. Each responder has a keyCommands property that you can redefine and use to return the key command objects that responder supports. Key command sequences are generated only for devices with an attached hardware keyboard.

The system always has the first opportunity to handle key commands. Key commands that map to known system events (such as Cut, Copy, and Paste) are automatically routed to the appropriate responder methods. For other key commands, the system looks for an object in the responder chain with a key command object that matches the pressed keys. If it finds such an object, it then searches the responder chain, looking for the first object that implements the corresponding action method, and calls the first one it finds.

iPad apps that run in macOS can use UIKeyCommand to create menu elements that have keyboard shortcuts.

Topics

Creating a key command object

convenience init(title: String, image: UIImage?, action: Selector, input: String, modifierFlags: UIKeyModifierFlags, propertyList: Any?, alternates: [UICommandAlternate], discoverabilityTitle: String?, attributes: UIMenuElement.Attributes, state: UIMenuElement.State)

Creates a key command that you can use as a menu element with a shortcut key, or a shortcut key only for a view controller.

convenience init(input: String, modifierFlags: UIKeyModifierFlags, action: Selector)

Creates a key command that matches the specified input.

init?(coder: NSCoder)

Creates a key command from data in an unarchiver.

init()

Creates a key command.

Adding menus and shortcuts to the menu bar and user interface

Provide quick access to useful actions by adding menus and keyboard shortcuts to your Mac app built with Mac Catalyst.

Navigating an apps user interface using a keyboard

Navigate between user interface elements using a keyboard and focusable UI elements in iPad apps and apps built with Mac Catalyst.

Getting information about the key command

var title: String

The key commands title.

var image: UIImage?

The key commands image.

var input: String?

The string of characters corresponding to the keys that must be pressed to match this key command.

var action: Selector?

The commands action-method selector.

var modifierFlags: UIKeyModifierFlags

The bit mask of modifier flags that must be pressed to match this key command.

struct UIKeyModifierFlags

Constants that indicate which modifier keys are pressed.

var discoverabilityTitle: String?

An elaborated title that explains the purpose of the key command.

var attributes: UIMenuElement.Attributes

The attributes indicating the style of the key command.

var state: UIMenuElement.State

The state of the key command.

Getting command alternatives

var alternates: [UICommandAlternate]

An array of alternative actions to take for the key command.

class UICommandAlternate

An object representing an alternative action for a command.

Localizing keyboard shortcuts

var allowsAutomaticLocalization: Bool

A Boolean value that determines whether the system automatically remaps keyboard shortcuts based on the keyboard layout.

var allowsAutomaticMirroring: Bool

A Boolean value that determines whether the system automatically swaps input strings for some keyboard shortcuts when the interface direction changes.

Overriding the key event delivery behavior

var wantsPriorityOverSystemBehavior: Bool

A Boolean value that indicates whether the key command takes precedence over text input or focus movements.

Associating data

var propertyList: Any?

An object that contains data to associate with the key command.

let UICommandTagShare: String

A value that identifies a command as a Share menu.

Converting strings to key commands

Constants that represent the text input strings that correspond to special nonvisible keys.

Deprecated

convenience init(input: String, modifierFlags: UIKeyModifierFlags, action: Selector, discoverabilityTitle: String)

Creates a key command object that matches the specified input and has a title.

Deprecated

Relationships

Inherits From

  • UICommand

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSCopying
  • NSObjectProtocol
  • NSSecureCoding
  • Sendable
  • SendableMetatype
  • UIAccessibilityIdentification
  • UIMenuLeaf

See Also

Menu elements and keyboard shortcuts

Adopting menus and UIActions in your user interface

Add menus to your user interface, with built-in button support and bar-button items, and create custom menu experiences.

class UIMenuElement

An object representing a menu, action, or command.

class UIAction

A menu element that performs its action in a closure.

class UICommand

A menu element that performs its action in a selector.

class UIDeferredMenuElement

A placeholder menu element that the system replaces with the result of the blocks completion handler.

class Provider Beta

struct Attributes

Attributes that determine the style of the menu element.

enum State

Constants that indicate the state of an action- or command-based menu element.

protocol UIMenuLeaf

An interface for an object that represents a menu element without child elements.


https://developer.apple.com/documentation/uikit/uicontextmenuinteractiondelegate/contextmenuinteraction(_:previewforhighlightingmenuwithconfiguration:)

#app-main)

  • UIKit
  • UIContextMenuInteractionDelegate
  • contextMenuInteraction(_:previewForHighlightingMenuWithConfiguration:) Deprecated

Instance Method

contextMenuInteraction(_:previewForHighlightingMenuWithConfiguration:)

Returns the source view to use when animating the appearance of the preview interface.

iOS 13.016.0DeprecatediPadOS 13.016.0DeprecatedMac Catalyst 13.116.0DeprecatedvisionOS 1.01.0Deprecated

@MainActor optional func contextMenuInteraction( _ interaction: UIContextMenuInteraction, previewForHighlightingMenuWithConfiguration configuration: UIContextMenuConfiguration

Parameters

interaction

The interaction object that triggered the preview.

configuration

The configuration object associated with the current interaction.

Return Value

An object containing the source view and configuration parameters for the animation.

Discussion

UIKit calls this method before an interaction begins, to give you an opportunity to supply a custom source view for the presentation animations. If you didnt provide a preview handler block in the configuration data, UIKit displays the specified view in the preview interface.

See Also

Deprecated

Returns the destination view to use when animating the appearance of the preview interface.

Deprecated


https://developer.apple.com/documentation/uikit/uiresponder/validate(_:)

#app-main)

  • UIKit
  • UIResponder
  • validate(_:)

Instance Method

validate(_:)

Asks the receiving responder to validate the command.

@MainActor func validate(_ command: UICommand)

Parameters

command

A mutable command object.

Discussion

Override this method in your view controller to make changes to a command before the command system renders it as a menu item.

See Also

Building and validating commands

func buildMenu(with: any UIMenuBuilder)

Asks the receiving responder to add and remove items from a menu system.

Requests the receiving responder to enable or disable the specified command in the user interface.

Returns the target object that responds to an action.


https://developer.apple.com/documentation/uikit/uimenusystem)


https://developer.apple.com/documentation/uikit/uicontextmenuinteractiondelegate).


https://developer.apple.com/documentation/uikit/uimenusystem/main)


https://developer.apple.com/documentation/uikit/uiresponder/buildmenu(with:))


https://developer.apple.com/documentation/uikit/uimenubuilder)


https://developer.apple.com/documentation/uikit/uiaction)


https://developer.apple.com/documentation/uikit/uikeycommand).


https://developer.apple.com/documentation/uikit/uicontextmenuinteractiondelegate/contextmenuinteraction(_:previewforhighlightingmenuwithconfiguration:)).

).#app-main)

The page you're looking for can't be found.

Search developer.apple.comSearch Icon


https://developer.apple.com/documentation/uikit/uiresponder/validate(_:)),


https://developer.apple.com/documentation/uikit/nsuiviewtoolbaritem

  • UIKit
  • NSUIViewToolbarItem

Class

NSUIViewToolbarItem

An item in a windows toolbar that hosts a custom UIKit view.

@MainActor class NSUIViewToolbarItem

Mentioned in

Building a desktop-class iPad app

Overview

The NSUIViewToolbarItem class lets you display a UIView in an NSToolbar. Use this class if you have a custom UIKit view you want to appear as a control in a toolbar when you build your app with Mac Catalyst.

For UIKit controls that support behavioral styles, set preferredBehavioralStyle to UIBehavioralStyle.mac if you want them to appear in the toolbar with the appearance and behavior of AppKit controls.

Topics

Creating a toolbar item

init(itemIdentifier: NSToolbarItem.Identifier, uiView: UIView)

Creates a toolbar item with the identifier and underlying UIKit view you specify.

Managing the view

var uiView: UIView

The UIKit view to host in an AppKit toolbar.

Relationships

Inherits From

  • NSToolbarItem

Conforms To

  • CVarArg
  • CustomDebugStringConvertible
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCopying
  • NSObjectProtocol
  • UIPopoverPresentationControllerSourceItem

See Also

Items

@MainActor class NSToolbarItem

A single item that appears in a windows toolbar.

@MainActor class NSToolbarItemGroup

A group of subitems in a toolbar item.

enum ControlRepresentation

enum SelectionMode

A value that indicates how a grouped toolbar item selects its subitems.

@MainActor class NSMenuToolbarItem

A control that presents a menu in a windows toolbar.

@MainActor class NSSearchToolbarItem

A toolbar item that contains a search field optimized for performing text-based searches.

@MainActor class NSTrackingSeparatorToolbarItem

A toolbar separator that aligns with the vertical split view in the same window.


https://developer.apple.com/documentation/uikit/nsuiviewtoolbaritem)


https://developer.apple.com/documentation/uikit/uititlebar/titlevisibility

  • UIKit
  • UITitlebar
  • titleVisibility

Instance Property

titleVisibility

A value that indicates the visibility of the title.

@MainActor var titleVisibility: UITitlebarTitleVisibility { get set }

Mentioned in

Removing the title bar in your Mac app built with Mac Catalyst

Discussion

Setting the title visibility to UITitlebarTitleVisibility.hidden hides only the title displayed in the title bar, not the title bar itself. To remove the title bar from the window, set titleVisibility to UITitlebarTitleVisibility.hidden and toolbar to nil.

This property defaults to UITitlebarTitleVisibility.visible.

See Also

Configuring the title bar

var separatorStyle: UITitlebarSeparatorStyle

The type of separator that the app displays between the title bar and content of a window.

enum UITitlebarSeparatorStyle

Styles that determine the type of separator displayed between the title bar and content of a window.

enum UITitlebarTitleVisibility

States that determine visibility of the title in the title bar.

var representedURL: URL?

A URL of the file or resource represented in the window.


https://developer.apple.com/documentation/uikit/uititlebartitlevisibility/hidden

  • UIKit
  • UITitlebarTitleVisibility
  • UITitlebarTitleVisibility.hidden

Case

UITitlebarTitleVisibility.hidden

A state indicating that the title isnt visible in the title bar.

case hidden

Mentioned in

Removing the title bar in your Mac app built with Mac Catalyst

See Also

Visibility states

case visible

A state indicating that the title is visible in the title bar.


https://developer.apple.com/documentation/uikit/uititlebar/toolbar

  • UIKit
  • UITitlebar
  • toolbar

Instance Property

toolbar

The toolbar displayed beneath or integrated with the title bar.

@MainActor var toolbar: NSToolbar? { get set }

Mentioned in

Removing the title bar in your Mac app built with Mac Catalyst

See Also

Configuring the toolbar

var toolbarStyle: UITitlebarToolbarStyle

The style of the toolbar determining its appearance and location related to the title bar.

enum UITitlebarToolbarStyle

Styles that determine the toolbars appearance and location related to the title bar.

var autoHidesToolbarInFullScreen: Bool

A Boolean value that determines whether the toolbar automatically hides in full-screen windows.


https://developer.apple.com/documentation/uikit/uititlebar/titlevisibility)


https://developer.apple.com/documentation/uikit/uititlebartitlevisibility/hidden)


https://developer.apple.com/documentation/uikit/uititlebar/toolbar)


https://developer.apple.com/documentation/uikit/uitooltipinteraction/delegate

  • UIKit
  • UIToolTipInteraction
  • delegate

Instance Property

delegate

An object that provides text that a tooltip displays instead of the default text.

@MainActor weak var delegate: (any UIToolTipInteractionDelegate)? { get set }

Discussion

To provide tooltip text based on the current state or unique logic of your app, set the delegate property to an object that conforms to the UIToolTipInteractionDelegate protocol and implements the toolTipInteraction(_:configurationAt:) method. The method returns a UIToolTipConfiguration object containing the text to display in the tooltip. For example, the following code listing instructs the tooltip to show the name of the views background color instead of the defaultToolTip text. If the color name is unavailable, the method returns nil, which disables the display of the tooltip.

let configuration: UIToolTipConfiguration? if let accessibilityName = backgroundColor?.accessibilityName { configuration = UIToolTipConfiguration(toolTip: "The color is (accessibilityName).") } else { configuration = nil }

return configuration }

See Also

Providing tooltip configurations

protocol UIToolTipInteractionDelegate

An interface that provides tooltip settings to an interaction.


https://developer.apple.com/documentation/uikit/uicontrol/tooltip

  • UIKit
  • UIControl
  • toolTip

Instance Property

toolTip

The default text to display in the controls tooltip.

@MainActor var toolTip: String? { get set }

Discussion

Set this property to the text that should appear in the tooltip. If you want your app to determine the tooltip text at a later time — for instance, to determine the text based on the current state of your app — set the delegate property of toolTipInteraction after setting toolTip with the default text. For example, the following code listing sets the tooltips default text and delegate for a shopping cart button:

let button = UIButton(configuration: configuration, primaryAction: action) button.toolTip = "Click to add the item to your cart. Your cart is empty." button.toolTipInteraction?.delegate = self

If the delegate implements the method toolTipInteraction(_:configurationAt:), the tooltip ignores the default text set in the toolTip property. For more information, see toolTipInteraction.

See Also

Showing tooltips

var toolTipInteraction: UIToolTipInteraction?

The tooltip interaction associated with the control.


https://developer.apple.com/documentation/uikit/uicontrol/tooltipinteraction

  • UIKit
  • UIControl
  • toolTipInteraction

Instance Property

toolTipInteraction

The tooltip interaction associated with the control.

@MainActor var toolTipInteraction: UIToolTipInteraction? { get }

Discussion

When you set the toolTip property, the control creates a UIToolTipInteraction object and assigns it to the toolTipInteraction property.

If you want to change the text of the tooltip based the current state of your app or application logic, assign a UIToolTipInteractionDelegate object to toolTipInteractions delegate property. For example, the following code listing sets the tooltips default text and delegate for a shopping cart button:

lazy var shoppingCartButtonWithTooltip: UIButton = { var configuration = UIButton.Configuration.filled() configuration.title = "Add to Cart" configuration.image = UIImage(systemName: "cart", variant: .circle) configuration.imagePlacement = NSDirectionalRectEdge.leading configuration.imagePadding = 4

let action = UIAction { [unowned self] _ in self.cartItemCount += 1 }

let button = UIButton(configuration: configuration, primaryAction: action) button.toolTip = "Click to add the item to your cart. Your cart is empty." button.toolTipInteraction?.delegate = self

return button }()

Then the delegate returns a tooltip configuration containing text that states the number of items in the shopping cart by implementing the toolTipInteraction(_:configurationAt:) method:

let text: String switch cartItemCount { case 0: text = "Click to add the item to your cart. Your cart is empty." case 1: text = "Click to add the item to your cart. Your cart contains (cartItemCount) item." default: text = "Click to add the item to your cart. Your cart contains (cartItemCount) items." }

return UIToolTipConfiguration(toolTip: text) }

See Also

Showing tooltips

var toolTip: String?

The default text to display in the controls tooltip.


https://developer.apple.com/documentation/uikit/uitooltipinteraction/init()

#app-main)

  • UIKit
  • UIToolTipInteraction
  • init()

Initializer

init()

Creates a tooltip interaction object.

@MainActor init()

Return Value

A tooltip interaction object.

See Also

Creating a tooltip interaction

init(defaultToolTip: String)

Creates a tooltip interaction object and sets the default tooltip text.


https://developer.apple.com/documentation/uikit/uitooltipinteraction/init(defaulttooltip:)

#app-main)

  • UIKit
  • UIToolTipInteraction
  • init(defaultToolTip:)

Initializer

init(defaultToolTip:)

Creates a tooltip interaction object and sets the default tooltip text.

@MainActor init(defaultToolTip: String)

Parameters

defaultToolTip

The text that appears in the tooltip by default.

Return Value

A tooltip interaction object.

See Also

Creating a tooltip interaction

init()

Creates a tooltip interaction object.


https://developer.apple.com/documentation/uikit/uitooltipinteraction/isenabled

  • UIKit
  • UIToolTipInteraction
  • isEnabled

Instance Property

isEnabled

A Boolean value that indicates whether the tooltip interaction is in the enabled state.

@MainActor var isEnabled: Bool { get set }

Discussion

A view or control can only display a tooltip from an enabled interaction. Set the value of the isEnabled property to true to enable the interaction or false to disable it. The default value is true.

See Also

Managing the interaction

var defaultToolTip: String?

The text that appears in a tooltip by default.


https://developer.apple.com/documentation/uikit/uitooltipinteraction/defaulttooltip

  • UIKit
  • UIToolTipInteraction
  • defaultToolTip

Instance Property

defaultToolTip

The text that appears in a tooltip by default.

@MainActor var defaultToolTip: String? { get set }

Discussion

Set this property to the default text to display in the tooltip.

If you set the delegate property to an object that conforms to the UIToolTipInteractionDelegate protocol and implements the toolTipInteraction(_:configurationAt:) method, then the return value of the delegate method determines the text that appears in the tooltip.

See Also

Managing the interaction

var isEnabled: Bool

A Boolean value that indicates whether the tooltip interaction is in the enabled state.


https://developer.apple.com/documentation/uikit/uitooltipinteraction/delegate)


https://developer.apple.com/documentation/uikit/uicontrol),


https://developer.apple.com/documentation/uikit/uicontrol/tooltip);


https://developer.apple.com/documentation/uikit/uicontrol/tooltip)


https://developer.apple.com/documentation/uikit/uicontrol/tooltipinteraction)


https://developer.apple.com/documentation/uikit/uitooltipinteraction/init())


https://developer.apple.com/documentation/uikit/uitooltipinteraction/init(defaulttooltip:))


https://developer.apple.com/documentation/uikit/uitooltipinteraction/isenabled)


https://developer.apple.com/documentation/uikit/uitooltipinteraction/defaulttooltip)


https://developer.apple.com/documentation/uikit/uitooltipinteractiondelegate/tooltipinteraction(_:configurationat:)


https://developer.apple.com/documentation/uikit/uitooltipconfiguration


https://developer.apple.com/documentation/uikit/uilabel):


https://developer.apple.com/documentation/uikit/uibutton),


https://developer.apple.com/documentation/uikit/uitooltipinteractiondelegate/tooltipinteraction(_:configurationat:))


https://developer.apple.com/documentation/uikit/uitooltipconfiguration)


https://developer.apple.com/documentation/uikit/uitextinteraction/delegate


https://developer.apple.com/documentation/uikit/uicolor/accessibilityname


https://developer.apple.com/documentation/uikit/uitooltipconfiguration/init(tooltip:in:)


https://developer.apple.com/documentation/uikit/uitextinteraction/delegate)


https://developer.apple.com/documentation/uikit/uicolor/accessibilityname)


https://developer.apple.com/documentation/uikit/uitooltipconfiguration/init(tooltip:in:))


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/dismissgrantingaccess(to:)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/documentpickermode


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/documentstorageurl


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/originalurl


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/prepareforpresentation(in:)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/provideridentifier


https://developer.apple.com/documentation/uikit/uistaterestoring


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/dismissgrantingaccess(to:))


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/documentpickermode)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/documentstorageurl)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/originalurl)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/prepareforpresentation(in:))


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/provideridentifier)


https://developer.apple.com/documentation/uikit/uidocumentpickerextensionviewcontroller/validtypes)


https://developer.apple.com/documentation/uikit/uistaterestoring)


https://developer.apple.com/documentation/uikit/configuring-a-custom-keyboard-interface


https://developer.apple.com/documentation/uikit/uiinputviewcontroller/requestsupplementarylexicon(completion:)


https://developer.apple.com/documentation/uikit/configuring-a-custom-keyboard-interface)


https://developer.apple.com/documentation/uikit/uiinputviewcontroller/requestsupplementarylexicon(completion:))


https://developer.apple.com/documentation/uikit/uilexicon/entries)


https://developer.apple.com/documentation/uikit/uiinputviewaudiofeedback/enableinputclickswhenvisible


https://developer.apple.com/documentation/uikit/uiinputviewaudiofeedback/enableinputclickswhenvisible)


https://developer.apple.com/documentation/uikit/handling-text-interactions-in-custom-keyboards


https://developer.apple.com/documentation/uikit/uikeyinput


https://developer.apple.com/documentation/uikit/uiinputviewcontroller/textdocumentproxy


https://developer.apple.com/documentation/uikit/creating-a-custom-keyboard


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentinputmode


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentcontextafterinput


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentcontextbeforeinput


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/adjusttextposition(bycharacteroffset:)


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/selectedtext


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/setmarkedtext(_:selectedrange:)


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/unmarktext()


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentidentifier


https://developer.apple.com/documentation/uikit/uitextinputtraits


https://developer.apple.com/documentation/uikit/handling-text-interactions-in-custom-keyboards)


https://developer.apple.com/documentation/uikit/uikeyinput)


https://developer.apple.com/documentation/uikit/uiinputviewcontroller/textdocumentproxy)


https://developer.apple.com/documentation/uikit/creating-a-custom-keyboard).


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentinputmode)


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentcontextafterinput)


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentcontextbeforeinput)


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/adjusttextposition(bycharacteroffset:))


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/selectedtext)


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/setmarkedtext(_:selectedrange:))


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/unmarktext())


https://developer.apple.com/documentation/uikit/uitextdocumentproxy/documentidentifier)


https://developer.apple.com/documentation/uikit/uitextinputtraits)


https://developer.apple.com/documentation/uikit/uilexiconentry/userinput


https://developer.apple.com/documentation/uikit/uilexiconentry/documenttext


https://developer.apple.com/documentation/uikit/uilexiconentry/userinput)


https://developer.apple.com/documentation/uikit/uilexiconentry/documenttext)


https://developer.apple.com/documentation/uikit/uiimage


https://developer.apple.com/documentation/uikit/uiimage/init(named:)


https://developer.apple.com/documentation/uikit/uiimage/init(named:in:compatiblewith:)


https://developer.apple.com/documentation/uikit/uitraitcollection/displayscale


https://developer.apple.com/documentation/uikit/uitraitcollection/userinterfaceidiom


https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom/unspecified


https://developer.apple.com/documentation/uikit/uitraitenvironment/traitcollectiondidchange(_:)


https://developer.apple.com/documentation/uikit/uiimageasset/init()


https://developer.apple.com/documentation/uikit/uiimageasset/init(coder:)


https://developer.apple.com/documentation/uikit/uiimageasset/register(_:with:)-2plm5


https://developer.apple.com/documentation/uikit/uiimageasset/register(_:with:)-89c5b


https://developer.apple.com/documentation/uikit/uiimageasset/unregister(imagewith:)


https://developer.apple.com/documentation/uikit/uiimageasset/unregisterimage(with:)


https://developer.apple.com/documentation/uikit/uiimageasset/image(with:)-3dsgf


https://developer.apple.com/documentation/uikit/uiimageasset/image(with:)-8jdwv


https://developer.apple.com/documentation/uikit/uiimage)


https://developer.apple.com/documentation/uikit/uiimage/init(named:))


https://developer.apple.com/documentation/uikit/uiimage/init(named:in:compatiblewith:))


https://developer.apple.com/documentation/uikit/uitraitcollection/displayscale)


https://developer.apple.com/documentation/uikit/uitraitcollection/userinterfaceidiom)


https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom/unspecified)


https://developer.apple.com/documentation/uikit/uitraitenvironment/traitcollectiondidchange(_:))


https://developer.apple.com/documentation/uikit/uiimageasset/init())


https://developer.apple.com/documentation/uikit/uiimageasset/init(coder:))


https://developer.apple.com/documentation/uikit/uiimageasset/register(_:with:)-2plm5)


https://developer.apple.com/documentation/uikit/uiimageasset/register(_:with:)-89c5b)


https://developer.apple.com/documentation/uikit/uiimageasset/unregister(imagewith:))


https://developer.apple.com/documentation/uikit/uiimageasset/unregisterimage(with:))


https://developer.apple.com/documentation/uikit/uiimageasset/image(with:)-3dsgf)


https://developer.apple.com/documentation/uikit/uiimageasset/image(with:)-8jdwv)


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource/source


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource/unwindaction


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource/sender


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource/source)


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource/unwindaction)


https://developer.apple.com/documentation/uikit/uistoryboardunwindseguesource/sender)


https://developer.apple.com/documentation/uikit/uinib/instantiate(withowner:options:)


https://developer.apple.com/documentation/uikit/uinib/init(nibname:bundle:)


https://developer.apple.com/documentation/uikit/uinib/init(data:bundle:)


https://developer.apple.com/documentation/uikit/uinib/optionskey


https://developer.apple.com/documentation/uikit/uinib/instantiate(withowner:options:))


https://developer.apple.com/documentation/uikit/uinib/init(nibname:bundle:))


https://developer.apple.com/documentation/uikit/uinib/init(data:bundle:))


https://developer.apple.com/documentation/uikit/uinib/optionskey)


https://developer.apple.com/documentation/uikit/displaying-and-managing-views-with-a-view-controller


https://developer.apple.com/documentation/uikit/uistoryboard/init(name:bundle:)


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateinitialviewcontroller()


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateinitialviewcontroller(creator:)


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateviewcontroller(withidentifier:)


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateviewcontroller(identifier:creator:)


https://developer.apple.com/documentation/uikit/displaying-and-managing-views-with-a-view-controller)


https://developer.apple.com/documentation/uikit/uistoryboard/init(name:bundle:))


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateinitialviewcontroller())


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateinitialviewcontroller(creator:))


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateviewcontroller(withidentifier:))


https://developer.apple.com/documentation/uikit/uistoryboard/instantiateviewcontroller(identifier:creator:))


https://developer.apple.com/documentation/uikit/showing-and-hiding-view-controllers


https://developer.apple.com/documentation/uikit/uiviewcontroller/show(_:sender:)


https://developer.apple.com/documentation/uikit/uinavigationcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/showdetailviewcontroller(_:sender:)


https://developer.apple.com/documentation/uikit/uisplitviewcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/shouldperformsegue(withidentifier:sender:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/prepare(for:sender:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/show(_:sender:))


https://developer.apple.com/documentation/uikit/uinavigationcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/showdetailviewcontroller(_:sender:))


https://developer.apple.com/documentation/uikit/uisplitviewcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/shouldperformsegue(withidentifier:sender:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/prepare(for:sender:))


https://developer.apple.com/documentation/uikit/nsdataasset/data


https://developer.apple.com/documentation/uikit/nsdataasset/init(name:)


https://developer.apple.com/documentation/uikit/nsdataasset/init(name:bundle:)


https://developer.apple.com/documentation/uikit/nsdataasset/name


https://developer.apple.com/documentation/uikit/nsdataassetname


https://developer.apple.com/documentation/uikit/nsdataasset/typeidentifier


https://developer.apple.com/documentation/uikit/nsdataasset/data)


https://developer.apple.com/documentation/uikit/nsdataasset/init(name:))


https://developer.apple.com/documentation/uikit/nsdataasset/init(name:bundle:))


https://developer.apple.com/documentation/uikit/nsdataasset/name)


https://developer.apple.com/documentation/uikit/nsdataassetname)


https://developer.apple.com/documentation/uikit/nsdataasset/typeidentifier)


https://developer.apple.com/documentation/uikit/uiuseractivityrestoring/restoreuseractivitystate(_:)


https://developer.apple.com/documentation/uikit/uiaccessibilityelement


https://developer.apple.com/documentation/uikit/uialertcontroller


https://developer.apple.com/documentation/uikit/uicloudsharingcontroller


https://developer.apple.com/documentation/uikit/uicollectionview


https://developer.apple.com/documentation/uikit/uicollectionviewcell


https://developer.apple.com/documentation/uikit/uicollectionviewcontroller


https://developer.apple.com/documentation/uikit/uicollectionviewlistcell


https://developer.apple.com/documentation/uikit/uicolorpickerviewcontroller


https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller


https://developer.apple.com/documentation/uikit/uifontpickerviewcontroller


https://developer.apple.com/documentation/uikit/uiimagepickercontroller


https://developer.apple.com/documentation/uikit/uipageviewcontroller


https://developer.apple.com/documentation/uikit/uireferencelibraryviewcontroller


https://developer.apple.com/documentation/uikit/uirefreshcontrol


https://developer.apple.com/documentation/uikit/uiscene


https://developer.apple.com/documentation/uikit/uisearchcontainerviewcontroller


https://developer.apple.com/documentation/uikit/uisearchcontroller


https://developer.apple.com/documentation/uikit/uitabbarcontroller


https://developer.apple.com/documentation/uikit/uitableview


https://developer.apple.com/documentation/uikit/uitableviewcontroller


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller


https://developer.apple.com/documentation/uikit/uivideoeditorcontroller


https://developer.apple.com/documentation/uikit/uiwindowscene


https://developer.apple.com/documentation/uikit/uiuseractivityrestoring/restoreuseractivitystate(_:))


https://developer.apple.com/documentation/uikit/uiaccessibilityelement)


https://developer.apple.com/documentation/uikit/uialertcontroller)


https://developer.apple.com/documentation/uikit/uicloudsharingcontroller)


https://developer.apple.com/documentation/uikit/uicollectionview)


https://developer.apple.com/documentation/uikit/uicollectionviewcell)


https://developer.apple.com/documentation/uikit/uicollectionviewcontroller)


https://developer.apple.com/documentation/uikit/uicollectionviewlistcell)


https://developer.apple.com/documentation/uikit/uicolorpickerviewcontroller)


https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller)


https://developer.apple.com/documentation/uikit/uifontpickerviewcontroller)


https://developer.apple.com/documentation/uikit/uiimagepickercontroller)


https://developer.apple.com/documentation/uikit/uipageviewcontroller)


https://developer.apple.com/documentation/uikit/uireferencelibraryviewcontroller)


https://developer.apple.com/documentation/uikit/uirefreshcontrol)


https://developer.apple.com/documentation/uikit/uiscene)


https://developer.apple.com/documentation/uikit/uisearchcontainerviewcontroller)


https://developer.apple.com/documentation/uikit/uisearchcontroller)


https://developer.apple.com/documentation/uikit/uitabbarcontroller)


https://developer.apple.com/documentation/uikit/uitableview)


https://developer.apple.com/documentation/uikit/uitableviewcontroller)


https://developer.apple.com/documentation/uikit/uitextformattingviewcontroller)


https://developer.apple.com/documentation/uikit/uivideoeditorcontroller)


https://developer.apple.com/documentation/uikit/uiwindowscene)


https://developer.apple.com/documentation/uikit/adding-custom-actions-and-activities


https://developer.apple.com/documentation/uikit/uiactivity/activitytype-swift.property


https://developer.apple.com/documentation/uikit/uiactivity/activitytitle


https://developer.apple.com/documentation/uikit/uiactivity/activityimage


https://developer.apple.com/documentation/uikit/uiactivity/canperform(withactivityitems:)


https://developer.apple.com/documentation/uikit/uiactivity/prepare(withactivityitems:)


https://developer.apple.com/documentation/uikit/uiactivity/activitycategory


https://developer.apple.com/documentation/uikit/uiactivity/activityviewcontroller


https://developer.apple.com/documentation/uikit/uiactivity/perform()


https://developer.apple.com/documentation/uikit/uiactivity/category


https://developer.apple.com/documentation/uikit/uiactivity/activitytype-swift.struct


https://developer.apple.com/documentation/uikit/uiactivity/activitydidfinish(_:)


https://developer.apple.com/documentation/uikit/adding-custom-actions-and-activities)


https://developer.apple.com/documentation/uikit/uiactivity/activitytype-swift.property)


https://developer.apple.com/documentation/uikit/uiactivity/activitytitle)


https://developer.apple.com/documentation/uikit/uiactivity/activityimage)


https://developer.apple.com/documentation/uikit/uiactivity/canperform(withactivityitems:))


https://developer.apple.com/documentation/uikit/uiactivity/prepare(withactivityitems:))


https://developer.apple.com/documentation/uikit/uiactivity/activitycategory)


https://developer.apple.com/documentation/uikit/uiactivity/activityviewcontroller)


https://developer.apple.com/documentation/uikit/uiactivity/perform())


https://developer.apple.com/documentation/uikit/uiactivity/category)


https://developer.apple.com/documentation/uikit/uiactivity/activitytype-swift.struct)


https://developer.apple.com/documentation/uikit/uiactivity/activitydidfinish(_:))


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/item


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/init(placeholderitem:)


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/placeholderitem


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/activitytype


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/item)


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/init(placeholderitem:))


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/placeholderitem)


https://developer.apple.com/documentation/uikit/uiactivityitemprovider/activitytype)


https://developer.apple.com/documentation/uikit/checking-the-availability-of-3d-touch


https://developer.apple.com/documentation/uikit/uitraitenvironment/traitcollection


https://developer.apple.com/documentation/uikit/uipopoverpresentationcontroller


https://developer.apple.com/documentation/uikit/uipresentationcontroller


https://developer.apple.com/documentation/uikit/uiscreen


https://developer.apple.com/documentation/uikit/uisheetpresentationcontroller


https://developer.apple.com/documentation/uikit/checking-the-availability-of-3d-touch)


https://developer.apple.com/documentation/uikit/uitraitenvironment/traitcollection)


https://developer.apple.com/documentation/uikit/uitraitcollection).


https://developer.apple.com/documentation/uikit/uipopoverpresentationcontroller)


https://developer.apple.com/documentation/uikit/uipresentationcontroller)


https://developer.apple.com/documentation/uikit/uiscreen)


https://developer.apple.com/documentation/uikit/uisheetpresentationcontroller)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontrollerplaceholderitem(_:)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:itemforactivitytype:)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:subjectforactivitytype:)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:datatypeidentifierforactivitytype:)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:thumbnailimageforactivitytype:suggestedsize:)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontrollerlinkmetadata(_:)


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontrollerplaceholderitem(_:))


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:itemforactivitytype:))


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:subjectforactivitytype:))


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:datatypeidentifierforactivitytype:))


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontroller(_:thumbnailimageforactivitytype:suggestedsize:))


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontrollerlinkmetadata(_:))


https://developer.apple.com/documentation/uikit/uiactivityitemsource/activityviewcontrollersharerecipients(_:))


https://developer.apple.com/documentation/uikit/collaborating-and-sharing-copies-of-your-data


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/init(activityitemsconfiguration:)


https://developer.apple.com/documentation/uikit/uiactivityitemsconfiguration


https://developer.apple.com/documentation/uikit/uiactivityitemsconfigurationreading


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionwithitemshandler-swift.property


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionwithitemshandler-swift.typealias


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/excludedactivitysectiontypes


https://developer.apple.com/documentation/uikit/uiactivitysectiontypes


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/allowsprominentactivity


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionhandler-swift.property


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionhandler-swift.typealias


https://developer.apple.com/documentation/uikit/collaborating-and-sharing-copies-of-your-data)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/init(activityitems:applicationactivities:))


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/init(activityitemsconfiguration:))


https://developer.apple.com/documentation/uikit/uiactivityitemsconfiguration)


https://developer.apple.com/documentation/uikit/uiactivityitemsconfigurationreading)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionwithitemshandler-swift.property)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionwithitemshandler-swift.typealias)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/excludedactivitytypes)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/excludedactivitysectiontypes)


https://developer.apple.com/documentation/uikit/uiactivitysectiontypes)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/allowsprominentactivity)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionhandler-swift.property)


https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/completionhandler-swift.typealias)


https://developer.apple.com/documentation/uikit/responding-to-memory-warnings


https://developer.apple.com/documentation/uikit/creating-a-custom-container-view-controller


https://developer.apple.com/documentation/uikit/uiviewcontroller/view


https://developer.apple.com/documentation/uikit/uiviewcontroller/init(nibname:bundle:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/loadview()


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewisappearing(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewwilldisappear(_:)


https://developer.apple.com/documentation/uikit/uicontentcontainer/viewwilltransition(to:with:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/supportedinterfaceorientations


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredinterfaceorientationforpresentation


https://developer.apple.com/documentation/uikit/uiviewcontroller/willrotate(to:duration:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/willanimaterotation(to:duration:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/didrotate(from:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewwilllayoutsubviews()


https://developer.apple.com/documentation/uikit/uiviewcontroller/addchild(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/removefromparent()


https://developer.apple.com/documentation/uikit/uiviewcontroller/willmove(toparent:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/didmove(toparent:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/didreceivememorywarning()


https://developer.apple.com/documentation/uikit/uiviewcontroller/restorationidentifier


https://developer.apple.com/documentation/uikit/restoring-your-app-s-state


https://developer.apple.com/documentation/uikit/uiviewcontroller/init(coder:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/storyboard


https://developer.apple.com/documentation/uikit/uiviewcontroller/nibname


https://developer.apple.com/documentation/uikit/uiviewcontroller/nibbundle


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewifloaded


https://developer.apple.com/documentation/uikit/uiviewcontroller/isviewloaded


https://developer.apple.com/documentation/uikit/uiviewcontroller/loadviewifneeded()


https://developer.apple.com/documentation/uikit/uiviewcontroller/title


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredcontentsize


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewwillappear(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdidappear(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdiddisappear(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/isbeingdismissed


https://developer.apple.com/documentation/uikit/uiviewcontroller/isbeingpresented


https://developer.apple.com/documentation/uikit/uiviewcontroller/ismovingfromparent


https://developer.apple.com/documentation/uikit/uiviewcontroller/ismovingtoparent


https://developer.apple.com/documentation/uikit/uiviewcontroller/additionalsafeareainsets


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewsafeareainsetsdidchange()


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewrespectssystemminimumlayoutmargins


https://developer.apple.com/documentation/uikit/uiviewcontroller/systemminimumlayoutmargins


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewlayoutmarginsdidchange()


https://developer.apple.com/documentation/uikit/uiviewcontroller/edgesforextendedlayout


https://developer.apple.com/documentation/uikit/uirectedge


https://developer.apple.com/documentation/uikit/uiviewcontroller/extendedlayoutincludesopaquebars


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdidlayoutsubviews()


https://developer.apple.com/documentation/uikit/uiviewcontroller/updateviewconstraints()


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofsupportedinterfaceorientations()


https://developer.apple.com/documentation/uikit/uiviewcontroller/prefersinterfaceorientationlocked


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofprefersinterfaceorientationlocked()


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforinterfaceorientationlock


https://developer.apple.com/documentation/uikit/uiviewcontroller/performsegue(withidentifier:sender:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childcontaining(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/canperformunwindsegueaction(_:from:sender:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/unwind(for:towards:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/present(_:animated:completion:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/dismiss(animated:completion:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/modalpresentationstyle


https://developer.apple.com/documentation/uikit/uimodalpresentationstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/modaltransitionstyle


https://developer.apple.com/documentation/uikit/uimodaltransitionstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/ismodalinpresentation


https://developer.apple.com/documentation/uikit/uiviewcontroller/definespresentationcontext


https://developer.apple.com/documentation/uikit/uiviewcontroller/providespresentationcontexttransitionstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/disablesautomatickeyboarddismissal


https://developer.apple.com/documentation/uikit/uiviewcontroller/showdetailtargetdidchangenotification


https://developer.apple.com/documentation/uikit/uiviewcontroller/transitioningdelegate


https://developer.apple.com/documentation/uikit/uiviewcontroller/transitioncoordinator


https://developer.apple.com/documentation/uikit/uiviewcontroller/targetviewcontroller(foraction:sender:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/presentationcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/popoverpresentationcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/sheetpresentationcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/activepresentationcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/restoresfocusaftertransition


https://developer.apple.com/documentation/uikit/customizing-and-resizing-sheets-in-uikit


https://developer.apple.com/documentation/uikit/uiviewcontroller/collapsesecondaryviewcontroller(_:for:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/separatesecondaryviewcontroller(for:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/overrideuserinterfacestyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferreduserinterfacestyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforuserinterfacestyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsuserinterfaceappearanceupdate()


https://developer.apple.com/documentation/uikit/uiuserinterfacestyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/traitoverrides-1z1cc


https://developer.apple.com/documentation/uikit/uiviewcontroller/transition(from:to:duration:options:animations:completion:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/shouldautomaticallyforwardappearancemethods


https://developer.apple.com/documentation/uikit/uiviewcontroller/beginappearancetransition(_:animated:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/endappearancetransition()


https://developer.apple.com/documentation/uikit/uiviewcontroller/hierarchyinconsistencyexception


https://developer.apple.com/documentation/uikit/uiviewcontroller/presentingviewcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/presentedviewcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/parent


https://developer.apple.com/documentation/uikit/uiviewcontroller/splitviewcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/navigationcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/tabbarcontroller


https://developer.apple.com/documentation/uikit/uiviewcontroller/navigationitem


https://developer.apple.com/documentation/uikit/uiviewcontroller/hidesbottombarwhenpushed


https://developer.apple.com/documentation/uikit/uiviewcontroller/tabbaritem


https://developer.apple.com/documentation/uikit/uiviewcontroller/tabbarobservedscrollview


https://developer.apple.com/documentation/uikit/uiviewcontroller/setcontentscrollview(_:for:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setcontentscrollview(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/contentscrollview(for:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/contentunavailableconfiguration-4b95e


https://developer.apple.com/documentation/uikit/uiviewcontroller/contentunavailableconfigurationstate-7sczw


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdatecontentunavailableconfiguration()


https://developer.apple.com/documentation/uikit/uiviewcontroller/updatecontentunavailableconfiguration(using:)


https://developer.apple.com/documentation/uikit/uicontentunavailableconfiguration-swift.struct


https://developer.apple.com/documentation/uikit/uiviewcontroller/extensioncontext


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredscreenedgesdeferringsystemgestures


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforscreenedgesdeferringsystemgestures


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofscreenedgesdeferringsystemgestures()


https://developer.apple.com/documentation/uikit/uiviewcontroller/prefershomeindicatorautohidden


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforhomeindicatorautohidden


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofhomeindicatorautohidden()


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredtransition


https://developer.apple.com/documentation/uikit/uiviewcontroller/transition


https://developer.apple.com/documentation/uikit/uiviewcontroller/focusgroupidentifier


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferspointerlocked


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofpreferspointerlocked()


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforpointerlock


https://developer.apple.com/documentation/uikit/uiviewcontroller/prefersstatusbarhidden


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforstatusbarhidden


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforstatusbarstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredstatusbarstyle


https://developer.apple.com/documentation/uikit/uistatusbarstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/modalpresentationcapturesstatusbarappearance


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredstatusbarupdateanimation


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsstatusbarappearanceupdate()


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerfortouchbar


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedstouchbarupdate()


https://developer.apple.com/documentation/uikit/uiviewcontroller/performsactionswhilepresentingmodally


https://developer.apple.com/documentation/uikit/uiviewcontroller/addkeycommand(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/removekeycommand(_:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/isediting


https://developer.apple.com/documentation/uikit/uiviewcontroller/setediting(_:animated:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/editbuttonitem


https://developer.apple.com/documentation/uikit/uiviewcontroller/restorationclass


https://developer.apple.com/documentation/uikit/uiviewcontroller/encoderestorablestate(with:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/decoderestorablestate(with:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/applicationfinishedrestoringstate()


https://developer.apple.com/documentation/uikit/uiviewcontroller/interactionactivitytrackingbasename


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewloading


https://developer.apple.com/documentation/uikit/uicontainerbackgroundstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller-deprecated-symbols


https://developer.apple.com/documentation/uikit/uiviewcontroller/showdetailtargetdidchangemessage


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforpreferredcontainerbackgroundstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredcontainerbackgroundstyle


https://developer.apple.com/documentation/uikit/uiviewcontroller/tab


https://developer.apple.com/documentation/uikit/uiviewcontroller/findview(withaccessibilityidentifier:)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofpreferredcontainerbackgroundstyle()


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateproperties()


https://developer.apple.com/documentation/uikit/uiviewcontroller/updateproperties()


https://developer.apple.com/documentation/uikit/uiviewcontroller/updatepropertiesifneeded()


https://developer.apple.com/documentation/uikit/uiviewcontroller/updatetraitsifneeded()


https://developer.apple.com/documentation/uikit/responding-to-memory-warnings)


https://developer.apple.com/documentation/uikit/creating-a-custom-container-view-controller)


https://developer.apple.com/documentation/uikit/uiviewcontroller).


https://developer.apple.com/documentation/uikit/uiviewcontroller/view)


https://developer.apple.com/documentation/uikit/uiviewcontroller/init(nibname:bundle:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/loadview())


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewisappearing(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewwilldisappear(_:))


https://developer.apple.com/documentation/uikit/uicontentcontainer/viewwilltransition(to:with:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/supportedinterfaceorientations)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredinterfaceorientationforpresentation)


https://developer.apple.com/documentation/uikit/uiviewcontroller/willrotate(to:duration:)),


https://developer.apple.com/documentation/uikit/uiviewcontroller/willanimaterotation(to:duration:)),


https://developer.apple.com/documentation/uikit/uiviewcontroller/didrotate(from:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewwilllayoutsubviews())


https://developer.apple.com/documentation/uikit/uiviewcontroller/addchild(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/removefromparent())


https://developer.apple.com/documentation/uikit/uiviewcontroller/willmove(toparent:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/didmove(toparent:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/didreceivememorywarning())


https://developer.apple.com/documentation/uikit/uiviewcontroller/restorationidentifier)


https://developer.apple.com/documentation/uikit/restoring-your-app-s-state).


https://developer.apple.com/documentation/uikit/uiviewcontroller/init(coder:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/storyboard)


https://developer.apple.com/documentation/uikit/uiviewcontroller/nibname)


https://developer.apple.com/documentation/uikit/uiviewcontroller/nibbundle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewifloaded)


https://developer.apple.com/documentation/uikit/uiviewcontroller/isviewloaded)


https://developer.apple.com/documentation/uikit/uiviewcontroller/loadviewifneeded())


https://developer.apple.com/documentation/uikit/uiviewcontroller/title)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredcontentsize)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewwillappear(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdidappear(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdiddisappear(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/isbeingdismissed)


https://developer.apple.com/documentation/uikit/uiviewcontroller/isbeingpresented)


https://developer.apple.com/documentation/uikit/uiviewcontroller/ismovingfromparent)


https://developer.apple.com/documentation/uikit/uiviewcontroller/ismovingtoparent)


https://developer.apple.com/documentation/uikit/uiviewcontroller/additionalsafeareainsets)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewsafeareainsetsdidchange())


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewrespectssystemminimumlayoutmargins)


https://developer.apple.com/documentation/uikit/uiviewcontroller/systemminimumlayoutmargins)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewlayoutmarginsdidchange())


https://developer.apple.com/documentation/uikit/uiviewcontroller/edgesforextendedlayout)


https://developer.apple.com/documentation/uikit/uirectedge)


https://developer.apple.com/documentation/uikit/uiviewcontroller/extendedlayoutincludesopaquebars)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewdidlayoutsubviews())


https://developer.apple.com/documentation/uikit/uiviewcontroller/updateviewconstraints())


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofsupportedinterfaceorientations())


https://developer.apple.com/documentation/uikit/uiviewcontroller/prefersinterfaceorientationlocked)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofprefersinterfaceorientationlocked())


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforinterfaceorientationlock)


https://developer.apple.com/documentation/uikit/uiviewcontroller/performsegue(withidentifier:sender:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/allowedchildrenforunwinding(from:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/childcontaining(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/canperformunwindsegueaction(_:from:sender:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/unwind(for:towards:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/present(_:animated:completion:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/dismiss(animated:completion:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/modalpresentationstyle)


https://developer.apple.com/documentation/uikit/uimodalpresentationstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/modaltransitionstyle)


https://developer.apple.com/documentation/uikit/uimodaltransitionstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/ismodalinpresentation)


https://developer.apple.com/documentation/uikit/uiviewcontroller/definespresentationcontext)


https://developer.apple.com/documentation/uikit/uiviewcontroller/providespresentationcontexttransitionstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/disablesautomatickeyboarddismissal)


https://developer.apple.com/documentation/uikit/uiviewcontroller/showdetailtargetdidchangenotification)


https://developer.apple.com/documentation/uikit/uiviewcontroller/transitioningdelegate)


https://developer.apple.com/documentation/uikit/uiviewcontroller/transitioncoordinator)


https://developer.apple.com/documentation/uikit/uiviewcontroller/targetviewcontroller(foraction:sender:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/presentationcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/popoverpresentationcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/sheetpresentationcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/activepresentationcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/restoresfocusaftertransition)


https://developer.apple.com/documentation/uikit/customizing-and-resizing-sheets-in-uikit)


https://developer.apple.com/documentation/uikit/uiviewcontroller/collapsesecondaryviewcontroller(_:for:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/separatesecondaryviewcontroller(for:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/overrideuserinterfacestyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferreduserinterfacestyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforuserinterfacestyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsuserinterfaceappearanceupdate())


https://developer.apple.com/documentation/uikit/uiuserinterfacestyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/traitoverrides-1z1cc)


https://developer.apple.com/documentation/uikit/uiviewcontroller/children)


https://developer.apple.com/documentation/uikit/uiviewcontroller/transition(from:to:duration:options:animations:completion:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/shouldautomaticallyforwardappearancemethods)


https://developer.apple.com/documentation/uikit/uiviewcontroller/beginappearancetransition(_:animated:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/endappearancetransition())


https://developer.apple.com/documentation/uikit/uiviewcontroller/hierarchyinconsistencyexception)


https://developer.apple.com/documentation/uikit/uiviewcontroller/presentingviewcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/presentedviewcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/parent)


https://developer.apple.com/documentation/uikit/uiviewcontroller/splitviewcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/navigationcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/tabbarcontroller)


https://developer.apple.com/documentation/uikit/uiviewcontroller/navigationitem)


https://developer.apple.com/documentation/uikit/uiviewcontroller/hidesbottombarwhenpushed)


https://developer.apple.com/documentation/uikit/uiviewcontroller/settoolbaritems(_:animated:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/toolbaritems)


https://developer.apple.com/documentation/uikit/uiviewcontroller/tabbaritem)


https://developer.apple.com/documentation/uikit/uiviewcontroller/tabbarobservedscrollview)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setcontentscrollview(_:for:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/setcontentscrollview(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/contentscrollview(for:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/contentunavailableconfiguration-4b95e)


https://developer.apple.com/documentation/uikit/uiviewcontroller/contentunavailableconfigurationstate-7sczw)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdatecontentunavailableconfiguration())


https://developer.apple.com/documentation/uikit/uiviewcontroller/updatecontentunavailableconfiguration(using:))


https://developer.apple.com/documentation/uikit/uicontentunavailableconfiguration-swift.struct)


https://developer.apple.com/documentation/uikit/uiviewcontroller/extensioncontext)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredscreenedgesdeferringsystemgestures)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforscreenedgesdeferringsystemgestures)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofscreenedgesdeferringsystemgestures())


https://developer.apple.com/documentation/uikit/uiviewcontroller/prefershomeindicatorautohidden)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforhomeindicatorautohidden)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofhomeindicatorautohidden())


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredtransition)


https://developer.apple.com/documentation/uikit/uiviewcontroller/transition)


https://developer.apple.com/documentation/uikit/uiviewcontroller/focusgroupidentifier)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferspointerlocked)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsupdateofpreferspointerlocked())


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforpointerlock)


https://developer.apple.com/documentation/uikit/uiviewcontroller/prefersstatusbarhidden)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforstatusbarhidden)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childforstatusbarstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredstatusbarstyle)


https://developer.apple.com/documentation/uikit/uistatusbarstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/modalpresentationcapturesstatusbarappearance)


https://developer.apple.com/documentation/uikit/uiviewcontroller/preferredstatusbarupdateanimation)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedsstatusbarappearanceupdate())


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerfortouchbar)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setneedstouchbarupdate())


https://developer.apple.com/documentation/uikit/uiviewcontroller/performsactionswhilepresentingmodally)


https://developer.apple.com/documentation/uikit/uiviewcontroller/addkeycommand(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/removekeycommand(_:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/isediting)


https://developer.apple.com/documentation/uikit/uiviewcontroller/setediting(_:animated:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/editbuttonitem)


https://developer.apple.com/documentation/uikit/restoring-your-app-s-state)


https://developer.apple.com/documentation/uikit/uiviewcontroller/restorationclass)


https://developer.apple.com/documentation/uikit/uiviewcontroller/encoderestorablestate(with:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/decoderestorablestate(with:))


https://developer.apple.com/documentation/uikit/uiviewcontroller/applicationfinishedrestoringstate())


https://developer.apple.com/documentation/uikit/uiviewcontroller/interactionactivitytrackingbasename)


https://developer.apple.com/documentation/uikit/uiviewcontroller/viewloading)


https://developer.apple.com/documentation/uikit/uicontainerbackgroundstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller-deprecated-symbols)


https://developer.apple.com/documentation/uikit/uiviewcontroller/showdetailtargetdidchangemessage)


https://developer.apple.com/documentation/uikit/uiviewcontroller/childviewcontrollerforpreferredcontainerbackgroundstyle)


https://developer.apple.com/documentation/uikit/uiviewcontroller/ornaments)


https://developer.apple.com/documentation/uikit/uidocument/saveoperation/forcreating


https://developer.apple.com/documentation/uikit/uidocument/saveoperation/forcreating)


https://developer.apple.com/documentation/uikit/uidocument/read(from:)).


https://developer.apple.com/documentation/uikit/uidocument/fileurl).


https://developer.apple.com/documentation/uikit/uidocument/save(to:for:completionhandler:)),


https://developer.apple.com/documentation/uikit/uidocument/revert(tocontentsof:completionhandler:)).


https://developer.apple.com/documentation/uikit/uidocument/writecontents(_:andattributes:safelyto:for:)).


https://developer.apple.com/documentation/uikit/providing-access-to-directories


https://developer.apple.com/documentation/uikit/customizing-the-browser


https://developer.apple.com/documentation/uikit/adding-a-document-browser-to-your-app


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/activedocumentcreationintent


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/delegate


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontrollerdelegate


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/importdocument(at:nexttodocumentat:mode:completionhandler:)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/allowsdocumentcreation


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/allowspickingmultipleitems


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/revealdocument(at:importifneeded:completion:)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/browseruserinterfacestyle-swift.property


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/browseruserinterfacestyle-swift.enum


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/shouldshowfileextensions


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/localizedcreatedocumentactiontitle


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/defaultdocumentaspectratio


https://developer.apple.com/documentation/uikit/uidocumentbrowseraction


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/transitioncontroller(fordocumentat:)


https://developer.apple.com/documentation/uikit/uidocumentbrowsertransitioncontroller


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/renamedocument(at:proposedname:completionhandler:)


https://developer.apple.com/documentation/uikit/uidocumentbrowsererror


https://developer.apple.com/documentation/uikit/uidocumentbrowsererror/code


https://developer.apple.com/documentation/uikit/uidocumentbrowsererrordomain


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/transitioncontroller(fordocumenturl:)


https://developer.apple.com/documentation/uikit/building-a-document-browser-based-app


https://developer.apple.com/documentation/uikit/building-a-document-browser-app-for-custom-file-formats


https://developer.apple.com/documentation/uikit/uidocumentinteractioncontroller


https://developer.apple.com/documentation/uikit/providing-access-to-directories)


https://developer.apple.com/documentation/uikit/customizing-the-browser)


https://developer.apple.com/documentation/uikit/adding-a-document-browser-to-your-app)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/init(foropening:))


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/activedocumentcreationintent)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/delegate)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontrollerdelegate)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/importdocument(at:nexttodocumentat:mode:completionhandler:))


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/allowsdocumentcreation)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/allowspickingmultipleitems)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/revealdocument(at:importifneeded:completion:))


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/contenttypesforrecentdocuments)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/browseruserinterfacestyle-swift.property)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/browseruserinterfacestyle-swift.enum)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/additionalleadingnavigationbarbuttonitems)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/additionaltrailingnavigationbarbuttonitems)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/shouldshowfileextensions)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/localizedcreatedocumentactiontitle)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/defaultdocumentaspectratio)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/customactions)


https://developer.apple.com/documentation/uikit/uidocumentbrowseraction)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/transitioncontroller(fordocumentat:))


https://developer.apple.com/documentation/uikit/uidocumentbrowsertransitioncontroller)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/renamedocument(at:proposedname:completionhandler:))


https://developer.apple.com/documentation/uikit/uidocumentbrowsererror)


https://developer.apple.com/documentation/uikit/uidocumentbrowsererror/code)


https://developer.apple.com/documentation/uikit/uidocumentbrowsererrordomain)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/init(foropeningfileswithcontenttypes:))


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/recentdocumentscontenttypes)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/allowedcontenttypes)


https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller/transitioncontroller(fordocumenturl:))


https://developer.apple.com/documentation/uikit/building-a-document-browser-based-app)


https://developer.apple.com/documentation/uikit/building-a-document-browser-app-for-custom-file-formats)


https://developer.apple.com/documentation/uikit/uidocumentinteractioncontroller)


https://developer.apple.com/documentation/uikit/uidocument/performasynchronousfileaccess(_:)).


https://developer.apple.com/documentation/uikit/uidocument/hasunsavedchanges).


https://developer.apple.com/documentation/uikit/uidocument/undomanager))


https://developer.apple.com/documentation/uikit/uidocument/state/normal


https://developer.apple.com/documentation/uikit/uidocument/state/editingdisabled