What you need to do to personalize the Document Based APP template?
Use your UIDocument subclass instead of the stubbed out one.
Use your document-viewing MVC code(already using UIDocument) instead of stub
Add code to UIDocumentBrowserViewController subclass to …
a. configure the UIDocumentBrowserViewController (allow multiple selection? creation of new documents? etc)
b. specify the url of a template document to copy to create new documents
c. present your document-viewing MVC modally given the url of a document
Update the Document Types in Project Settings to be your types(instead of public.image)
Steps 1 and 2
As long as you properly implement UIDocument in your MVC, this is no extra work
Step 3a: Configuring the UIDocumentBrowserViewController
This happens in its viewDidLoad …
override func viewDidLoad() {
super.viewDidLoad()
delegate = self //the guts of making UIDocumentBrowserViewController work are in its delegate methods
allowsDocumentCreation = true
allowsPickingMultipleItems = true
browserUserInterfaceStyle = .dark
view.tintColor = .white
}
// set these as you wish
Step 3b: Specifying the “new document” template URL
This happens in this UIDocumentBrowserViewController delegate method …
func documentBrowser(_ controller: UIDBVC,
didRequestDocumentCreationWithHandler handler: @escaping (URL?, UIDBVC.ImportMode) -> Void
){
let url:URL? = ... //where your blank, template document can be found
importHandler(url, .copy or .move)
}
Usually you would specify .copy, but you could create a new template each time and .move.
Likely you would have some code here that creates that blank template (or ship with your app)
Step 3c: Presenting your document MVC modally
The Xcode template stubs out a function called presentDocument(at: URL) to do this …
func presentDocument(at url: URL) {
let story = UIStoryboard(name: "Main", bundle: nil)
if let docvc = story.instantiateViewController(withIdentifier: "DocVC") as? DocVC {
docvc.document = MyDocument(fileURL: url)
present(docvc, animated: true)
}
}
We can call this function anything you want
The point is that it takes a URL to one of your documents and show it
The Xcode template then calls this from the appropriate delegate methods in UIDBVC
That’s all you have to do to get UIDBVC working
Step 4: Specifying your types
Unless your app opens public.image files, you’ll need to change that in Project Settings