<!--
{
  "availability" : [
    "iOS: 11.0.0 -",
    "iPadOS: 11.0.0 -",
    "macCatalyst: 13.1.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:didRequestDocumentCreationWithHandler:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(pl)UIDocumentBrowserViewControllerDelegate(im)documentBrowser:didRequestDocumentCreationWithHandler:"
  },
  "title" : "documentBrowser(_:didRequestDocumentCreationWithHandler:)"
}
-->

# documentBrowser(_:didRequestDocumentCreationWithHandler:)

Asks the delegate to create a new document.

```
optional func documentBrowser(_ controller: UIDocumentBrowserViewController, didRequestDocumentCreationWithHandler importHandler: @escaping (URL?, UIDocumentBrowserViewController.ImportMode) -> Void)
```

## Parameters

`controller`

The current document browser.

`importHandler`

A block that takes the following parameters:

- urlToImport: The URL of the document’s initial, temporary location.
- importMode: The mode used when importing the document. For a list of import modes, see [`UIDocumentBrowserViewController.ImportMode`](/documentation/UIKit/UIDocumentBrowserViewController/ImportMode).

## Discussion

Implement this method to create new documents for the user:

1. (Optional) Display any controls the user needs to configure the document.
2. Create a new document and save it to a temporary location. If you use a [`UIDocument`](/documentation/UIKit/UIDocument) subclass to create the document, you must close it before calling the `importHandler` block. Always open a new document in your [`documentBrowser(_:didImportDocumentAt:toDestinationURL:)`](/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:didImportDocumentAt:toDestinationURL:)) method.
3. Call the provided `importHandler` block. To confirm the request, pass in the document’s temporary URL and the import mode ([`UIDocumentBrowserViewController.ImportMode.copy`](/documentation/UIKit/UIDocumentBrowserViewController/ImportMode/copy) or [`UIDocumentBrowserViewController.ImportMode.move`](/documentation/UIKit/UIDocumentBrowserViewController/ImportMode/move)). To cancel the request, pass `nil` and [`UIDocumentBrowserViewController.ImportMode.none`](/documentation/UIKit/UIDocumentBrowserViewController/ImportMode/none).
4. Implement the [`documentBrowser(_:didImportDocumentAt:toDestinationURL:)`](/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:didImportDocumentAt:toDestinationURL:)) method. In this method, open the document at the destination URL. You must use either a [`UIDocument`](/documentation/UIKit/UIDocument) subclass, or a file presenter and file coordination.
5. Modally present this document to the user.

> Important:
> You must always call the import handler. If you cannot create a new document, pass `nil` for the URL and ``doc://com.apple.uikit/documentation/UIKit/UIDocumentBrowserViewController/ImportMode/none`` for the import mode.

The following example shows a possible implementation of the  [`documentBrowser(_:didRequestDocumentCreationWithHandler:)`](/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:didRequestDocumentCreationWithHandler:)) method.

```swift
// Create New Document
func documentBrowser(_ controller: UIDocumentBrowserViewController, didRequestDocumentCreationWithHandler importHandler: @escaping (URL?, UIDocumentBrowserViewController.ImportMode) -> Void) {
        
    let doc = // Create a new UIDocument... 
    let url = // Get a temporary URL...
    
    // Create a new document in a temporary location
    doc.save(to: url, for: .forCreating) { (saveSuccess) in
        
        // Make sure the document saved successfully
        guard saveSuccess else {            
            // Cancel document creation
            importHandler(nil, .none)
            return
        }
        
        // Close the document.
        doc.close(completionHandler: { (closeSuccess) in
            
            // Make sure the document closed successfully
            guard closeSuccess else {                
                // Cancel document creation
                importHandler(nil, .none)
                return
            }
            
            // Pass the document's temporary URL to the import handler.
            importHandler(url, .move)
        })
    }
}
```

After the `importHandler` block is called, the document browser asynchronously imports the document into its final destination. When possible, the document browser imports to the currently open directory. When there is no currently open directory (for example, when the Recents tab is open), it uses the default directory.

Users can set the default directory in Settings. For more information, see [Setting up a document browser app](/documentation/UIKit/setting-up-a-document-browser-app).

When the import is complete, the browser calls one of the following delegate methods:

- **On success.** [`documentBrowser(_:didImportDocumentAt:toDestinationURL:)`](/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:didImportDocumentAt:toDestinationURL:))
- **On failure.** [`documentBrowser(_:failedToImportDocumentAt:error:)`](/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:failedToImportDocumentAt:error:))

The document browser enables the Add button (+) only when both of the following are true:

- The [`allowsDocumentCreation`](/documentation/UIKit/UIDocumentBrowserViewController/allowsDocumentCreation) property is set to <doc://com.apple.documentation/documentation/Swift/true> (the default value).
- The document browser delegate implements the [`documentBrowser(_:didRequestDocumentCreationWithHandler:)`](/documentation/UIKit/UIDocumentBrowserViewControllerDelegate/documentBrowser(_:didRequestDocumentCreationWithHandler:)) method.

> Note:
> The document browser cannot create new documents if you do not implement this delegate method.

---

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