UIDocumentPickerViewController — paggawa gamit ang mga dokumento sa iOS

May-akda: IT Sectr Nai-publish: 2026-07-11 Oras ng pagbabasa: 6 min

UIDocumentPickerViewController — ay isang system controller ng iOS para sa pagpili ng mga dokumento mula sa file system, iCloud Drive, at mga third-party na cloud storage. Ang controller ay nagbibigay ng pinag-isang interface para sa pagbubukas at pag-import ng mga file ng anumang uri: mga larawan, PDF, teksto, at audio. Ayon sa Apple Developer Documentation (2025), sinusuportahan ng UIDocumentPickerViewController ang mga mode na import at export at ibinabalik ang mga napiling file bilang mga URL sa pamamagitan ng delegate.

Mga Pangunahing Punto

  • UIDocumentPickerViewController — system picker ng dokumento sa iOS para sa pagpili ng file mula sa anumang source.
  • Import mode kinokopya ang file sa sandbox ng app, export mode ay nagbibigay ng URL para basahin.
  • UTI filter naglilimita sa mga uri ng dokumentong ipinapakita: PDF, mga larawan, teksto, at iba pa.
  • UIDocumentPickerDelegate humahawak ng resulta ng pagpili at mga error sa pag-access ng file.
  • Multiple selection ay sinusuportahan sa pamamagitan ng flag na allowsMultipleSelection para sa pagpili ng maraming file.

Ano ang UIDocumentPickerViewController?

UIDocumentPickerViewController — ay isang UIKit controller na nagbibigay ng system interface para sa pagpili ng mga dokumento. Ito ay bahagi ng UIKit framework at available mula noong iOS 8. Ang controller ay nagpapakita ng file browser na kinabibilangan ng lokal na storage, iCloud Drive, at mga rehistradong third-party na cloud services.

Ang controller ay gumagana nang asynchronous: pagkatapos tawagin ang present, nakikita ng user ang system dialog, pumipili ng file, at ang resulta ay ibinabalik sa pamamagitan ng delegate. Ang app ay hindi nangangailangan ng mga espesyal na pahintulot para ma-access ang napiling file — ang system picker ay awtomatikong nagbibigay ng pansamantalang access sa URI.

Sinusuportahan ng UIDocumentPickerViewController ang iPad sa pamamagitan ng UIPopoverPresentationController at adaptive interface para sa iPhone. Mula noong iOS 14, nakatanggap ang controller ng updated na disenyo at suporta para sa sidebar navigation sa iPadOS.

Mga mode ng trabaho: import at export

UIDocumentPickerViewController ay gumagana sa dalawang pangunahing mode, na ang bawat isa ay tumutukoy kung paano ina-access ng app ang file. Ang mode ay itinakda sa pamamagitan ng parameter na forOpeningContentTypes o forExporting depende sa gawain.

Import mode (forOpeningContentTypes) kinokopya ang napiling file sa sandbox ng app. Ang app ay tumatanggap ng URL ng sarili nitong kopya ng file, na tanging ito lamang ang makaka-access. Ito ay isang ligtas na mode: ang file ng ibang app ay hindi binabago, at ang kopya ay ganap na kinokontrol ng kasalukuyang app.

Export mode (forExporting) ay nagbibigay ng URL sa orihinal na file nang walang pagkopya. Maaaring basahin ng app ang file sa pamamagitan ng link, ngunit ang mga pagbabago ay hindi nai-save pabalik. Ang mode na ito ay ginagamit kapag kailangan ilipat ang file sa ibang app o ipadala ito sa pamamagitan ng email. Para sa pagsulat ng mga pagbabago, ginagamit ang open mode na may security-scoped URL.

Pag-configure ng picker at pag-filter ayon sa UTI

UTI (Uniform Type Identifier) — ay isang sistema ng pagkilala sa mga uri ng nilalaman sa Apple ecosystem. Ang UIDocumentPickerViewController ay nag-filter ng mga ipinapakitang file batay sa UTI array na ipinadala sa pamamagitan ng forOpeningContentTypes. Kung walang tinukoy na UTI, ipinapakita ng picker ang lahat ng uri ng file.

  • PDF — com.adobe.pdf. Ang picker ay nagpapakita lamang ng mga PDF na dokumento.
  • Mga Larawan — public.image. Kasama ang JPEG, PNG, HEIC at iba pang format.
  • Teksto — public.plain-text. Nagpapakita ng .txt, .csv at iba pang text file.
  • Audio — public.audio. Kasama ang MP3, AAC, WAV at Lossless na format.
  • Video — public.movie. Nagpapakita ng MP4, MOV, AVI at iba pang video format.

Para sa pagpili ng maraming uri, ang array na [UTType.pdf, UTType.image] ay ipinapadala. Mula noong iOS 14, inirerekomenda ng Apple ang paggamit ng UTType sa halip na mga string constant. Awtomatikong ina-update ng UIDocumentPickerViewController ang listahan ng mga ipinapakitang uri kapag nagbago ang napiling provider.

Halimbawa ng code: pagpili ng dokumento sa Swift

Implementasyon ng UIDocumentPickerViewController sa Swift ay minimal: gumawa ng instance ng controller na may mga uri ng UTI, itakda ang delegate, at tawagin ang present. Pagkatapos pumili ng file, ang delegate ay tumatanggap ng array ng mga URL sa pamamaraang didPickDocumentsAt. Bawat URL ay isang security-scoped link na nangangailangan ng pagtawag sa startAccessingSecurityScopedResource.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .image],
    asCopy: true
)
picker.delegate = self
picker.allowsMultipleSelection = false
present(picker, animated: true)

// MARK: - UIDocumentPickerDelegate
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
    // basahin ang file mula sa url
}

Mga security-scoped na resource

Ang security-scoped URL ay nangangailangan ng pagtawag sa startAccessingSecurityScopedResource bago magbasa. Ang pamamaraang ito ay nagpapaalam sa system na ang app ay nakakakuha ng pansamantalang access sa isang file sa labas ng sandbox. Pagkatapos ng trabaho, siguraduhing tawagin ang stopAccessingSecurityScopedResource, kung hindi ay maaaring i-block ng system ang access.

UIDocumentPickerDelegate at paghawak ng mga resulta

UIDocumentPickerDelegate ay tumatanggap ng mga resulta ng pagpili ng file sa pamamagitan ng dalawang pamamaraan: didPickDocumentsAt sa tagumpay at didPickDocumentsAt sa pagkansela. Awtomatikong tinatawag ng iOS ang pagkansela kung isinara ng user ang picker nang walang pinili.

Ang paghawak ng error ay kasama ang pagsusuri ng availability ng URL. Kung ang user ay pumili ng file mula sa iCloud Drive ngunit ang device ay offline, ang URL ay maaaring hindi available. Inirerekomenda na suriin ang FileManager.default.isReadableFile bago magbasa at magpakita ng naiintindihang mensahe ng error sa user.

Para sa iOS 14+, ang bagong pamamaraang documentPicker:didPickDocumentsAt na may array ng mga URL ay available. Ang lumang pamamaraang didPickDocumentAt (iisa) ay deprecated. Palaging hawakan ang array, kahit na naka-disable ang allowsMultipleSelection — inirerekomenda ng Apple ang paggamit ng iisang handler.

UIDocumentPickerViewController sa iPad

iPad ay nangangailangan ng espesyal na configuration ng UIDocumentPickerViewController. Sa iPad, ang picker ay ipinapakita bilang popover at kailangang tukuyin ang sourceView para sa tamang pagpoposisyon. Kung walang sourceView, ang controller ay maaaring mag-crash na may exception sa iPadOS.

Para sa popover, ginagamit ang property na popoverPresentationController. Tukuyin ang sourceView at sourceRect para sa pag-angkla sa isang button o table cell. Sa iPhone, ang code na ito ay walang epekto — awtomatikong ipinapakita ng iOS ang picker sa full screen. Mula noong iPadOS 16, sinusuportahan ng controller ang sidebar at split view para sa pinahusay na navigation.

Ang adaptive na disenyo ng UIDocumentPickerViewController ay awtomatikong lumilipat sa pagitan ng full-screen (iPhone) at popover (iPad). Ang developer ay hindi kailangang mag-implement ng magkakahiwalay na controller para sa iba't ibang device — sapat na ang tamang pag-configure ng popoverPresentationController para sa iPad.

Mga Madalas Itanong

Ano ang UIDocumentPickerViewController sa iOS?

UIDocumentPickerViewController — ay isang system UIKit controller para sa pagpili ng mga dokumento mula sa iCloud Drive, lokal na storage, at mga third-party na cloud services. Ang controller ay nagbabalik ng URL ng napiling file sa pamamagitan ng delegate.

Paano pumili ng PDF sa pamamagitan ng UIDocumentPickerViewController?

Gumawa ng controller na may forOpeningContentTypes: [.pdf]. Ito ay maglilimita sa display sa mga PDF file lamang. Itakda ang delegate at tawagin ang present para ipakita ang system picker.

Ano ang pagkakaiba ng import mode at export mode?

Import mode kinokopya ang file sa sandbox ng app — ang mga pagbabago ay hindi nakakaapekto sa orihinal. Export mode ay nagbibigay ng URL sa orihinal na file para lamang sa pagbabasa nang walang pagkopya.

Ano ang security-scoped URL sa iOS?

Security-scoped URL — ay isang link sa isang file sa labas ng sandbox ng app. Bago magbasa, tawagin ang startAccessingSecurityScopedResource, pagkatapos ng trabaho — stopAccessingSecurityScopedResource.

Paano i-configure ang UIDocumentPickerViewController para sa iPad?

I-configure ang popoverPresentationController na may sourceView at sourceRect. Kung wala ito, sa iPad ang controller ay maaaring magdulot ng exception. Sa iPhone, ang mga setting ng popover ay hindi pinapansin — ang picker ay ipinapakita sa full screen.

Buod

  • UIDocumentPickerViewController — system controller ng iOS para sa pagpili ng dokumento, available mula noong iOS 8.
  • Import mode kinokopya ang file sa sandbox ng app, export mode ay nagbibigay ng read-only na access sa orihinal.
  • UTI filtering naglilimita sa mga uri ng file: PDF, mga larawan, teksto, audio, video, at iba pa.
  • UIDocumentPickerDelegate humahawak ng resulta ng pagpili sa pamamaraang didPickDocumentsAt na may array ng mga URL.
  • Security-scoped URL ay nangangailangan ng pagtawag sa startAccessingSecurityScopedResource bago basahin ang file.
  • iPad configuration ay kasama ang pag-set up ng popoverPresentationController na may sourceView para sa tamang display.
  • iOS 14+ nagdagdag ng updated na disenyo, sidebar, at suporta para sa UTType sa halip na mga string na UTI.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din