UIDocumentInteractionController — چیست، Open In و اسناد

نویسنده: IT Sectr منتشر شده: 2026-07-11 زمان مطالعه: 6 دقیقه

UIDocumentInteractionController — کنترل‌کننده iOS برای پیش‌نمایش اسناد و اشتراک فایل‌ها بین برنامه‌ها است. این کنترل‌کننده عملکرد Open In را پیاده‌سازی می‌کند و به کاربر اجازه می‌دهد فایل را در هر برنامه سازگاری باز کند، از طریق ایمیل ارسال کند یا در فضای ابری ذخیره کند. طبق Apple Developer Documentation (2025)، این کنترل‌کننده همچنین از Preview داخلی برای مشاهده PDF، تصاویر و اسناد اداری پشتیبانی می‌کند.

نکات مهم

  • UIDocumentInteractionController — کنترل‌کننده iOS برای مشاهده و ارسال اسناد به برنامه‌های دیگر.
  • Preview — نمایش‌دهنده داخلی PDF، تصاویر و اسناد اداری بدون تغییر برنامه.
  • Open In — عملکرد انتقال فایل به برنامه دیگر برای ویرایش یا مشاهده.
  • UIDocumentInteractionControllerDelegate انیمیشن‌ها، موقعیت منو و تکمیل عملیات را مدیریت می‌کند.
  • بر خلاف UIDocumentPickerViewController، این API فایل‌ها را انتخاب نمی‌کند، بلکه فایل‌های موجود را منتقل می‌کند.

UIDocumentInteractionController چیست؟

UIDocumentInteractionController — یک کلاس UIKit است که رابط سیستمی برای کار با اسناد ارائه می‌دهد. بر خلاف UIDocumentPickerViewController که فایل‌ها را انتخاب می‌کند، این کنترل‌کننده با فایل موجود برنامه کار می‌کند و به کاربر اقداماتی را پیشنهاد می‌دهد: پیش‌نمایش، باز کردن در برنامه دیگر، چاپ یا ارسال.

این کنترل‌کننده ViewController نیست — از طریق present فراخوانی نمی‌شود. در عوض، منوی سیستم را از طریق متد presentOptionsMenu یا presentPreview نمایش می‌دهد. منو تمام برنامه‌هایی را که برای پردازش این نوع فایل ثبت شده‌اند نشان می‌دهد.

UIDocumentInteractionController از iOS 2.0 در دسترس است و یکی از قدیمی‌ترین API‌ها برای کار با اسناد است. با وجود قدمت، برای پیاده‌سازی عملکرد Open In و پیش‌نمایش داخلی بدون استفاده از کتابخانه‌های شخص ثالث همچنان مناسب است.

حالت Preview: نمایش داخلی اسناد

Preview — نمایش‌دهنده داخلی اسناد است که توسط UIDocumentInteractionController ارائه می‌شود. از PDF، تصاویر، فایل‌های متنی و اسناد اداری (شامل .doc، .xls، .ppt) پشتیبانی می‌کند. Preview با انیمیشن انتقال مشابه Quick Look استاندارد نمایش داده می‌شود.

برای راه‌اندازی Preview، متد presentPreview را فراخوانی کنید. کنترل‌کننده به یک delegate با پیاده‌سازی متد previewControllerForDocumentInteractionController نیاز دارد که UIViewController را برای نمایش سند برمی‌گرداند. معمولاً self یا کنترل‌کننده ناوبری برگردانده می‌شود.

Preview داخلی نیازی به فریمورک‌ها یا مجوزهای اضافی ندارد. با هر فایلی که URL آن به ویژگی url منتقل شده است کار می‌کند. کاربر می‌تواند صفحات PDF را ورق بزند، تصاویر را بزرگ‌نمایی کند و متن را از اسناد کپی کند.

حالت Open In: انتقال فایل بین برنامه‌ها

Open In — عملکرد کلیدی UIDocumentInteractionController است. لیست برنامه‌هایی را که می‌توانند این نوع فایل را باز کنند نمایش می‌دهد. کاربر برنامه مقصد را انتخاب می‌کند و iOS فایل را به sandbox آن کپی کرده و برنامه را برای کار با سند راه‌اندازی می‌کند.

لیست برنامه‌ها به طور خودکار بر اساس Document Type ثبت شده در Info.plist سایر برنامه‌ها تشکیل می‌شود. اگر برنامه‌ای پشتیبانی از PDF را ثبت کرده باشد، در منوی Open In برای فایل‌های PDF ظاهر خواهد شد. سیستم همچنین اقدامات استاندارد را نمایش می‌دهد: چاپ، ارسال با ایمیل، ذخیره در Files.

Open In فایل را کپی می‌کند — برنامه مقصد نسخه خود را دریافت می‌کند، بنابراین تغییرات به برنامه اصلی بازگردانده نمی‌شوند. اگر ویرایش با ذخیره‌سازی مورد نیاز است، از UIDocumentPickerViewController در حالت export با URL امن استفاده کنید.

پیکربندی UIActivityViewController به عنوان جایگزین

از iOS 6، UIActivityViewController در دسترس است که همچنین از ارسال فایل‌ها پشتیبانی می‌کند. بر خلاف UIDocumentInteractionController، UIActivityViewController برگه اقدامات سیستم را با پشتیبانی از AirDrop، ایمیل، پیام‌ها و UIActivity سفارشی نمایش می‌دهد. برای ارسال ساده فایل‌ها، UIActivityViewController به عنوان API مدرن‌تر توصیه می‌شود.

نمونه کد: Open In در Swift

پیاده‌سازی Open In از طریق UIDocumentInteractionController فقط به چند خط کد نیاز دارد: ایجاد نمونه، تنظیم URL و delegate، فراخوانی presentOptionsMenu. کنترل‌کننده به طور خودکار لیست برنامه‌های موجود را بر اساس نوع فایل جمع‌آوری می‌کند.

swift
class DocumentViewController: UIViewController {

    lazy var interactionController = UIDocumentInteractionController()

    func shareFile(url: URL) {
        interactionController.url = url
        interactionController.uti = url.utiType()
        interactionController.delegate = self
        interactionController.presentOptionsMenu(
            from: self.view.bounds,
            in: self.view,
            animated: true
        )
    }
}

راه‌اندازی Preview به جای منو

برای نمایش نمایش‌دهنده داخلی به جای منوی Open In، از متد presentPreview استفاده کنید. کنترل‌کننده سند را در تمام صفحه با قابلیت ورق زدن نمایش می‌دهد. Delegate باید متد previewControllerForDocumentInteractionController را پیاده‌سازی کند که UIViewController را برای نمایش برمی‌گرداند.

UIDocumentInteractionControllerDelegate و چرخه حیات

UIDocumentInteractionControllerDelegate نمایش و پنهان‌سازی منو و Preview را مدیریت می‌کند. Delegate متدهای اختیاری را پیاده‌سازی می‌کند: documentInteractionControllerWillPresentOpenInMenu برای انیمیشن ظاهر شدن، documentInteractionControllerDidDismissOpenInMenu برای پاکسازی منابع پس از بسته شدن منو.

متد مهم برای Preview — previewControllerForDocumentInteractionController که باید UIViewController را برای نمایش سند برگرداند. اگر متد پیاده‌سازی نشده باشد یا nil برگرداند، Preview راه‌اندازی نخواهد شد. معمولاً self یا UINavigationController حاوی self برگردانده می‌شود.

کنترل‌کننده همچنین از متد documentInteractionController:didEndSendingToApplication پشتیبانی می‌کند که پس از انتقال موفق فایل به برنامه دیگر فراخوانی می‌شود. این امکان پاکسازی فایل موقت یا به‌روزرسانی رابط را پس از بازگشت به برنامه فراهم می‌کند.

تفاوت با UIDocumentPickerViewController

UIDocumentInteractionController و UIDocumentPickerViewController وظایف متفاوتی را حل می‌کنند، اگرچه هر دو با اسناد کار می‌کنند. تفاوت اصلی: UIDocumentInteractionController فایل موجود را به برنامه دیگر منتقل می‌کند، در حالی که UIDocumentPickerViewController فایل را از منبع خارجی برای برنامه جاری انتخاب می‌کند.

پارامترUIDocumentInteractionControllerUIDocumentPickerViewController
هدفارسال فایل به برنامه دیگرانتخاب فایل از منبع دیگر
منبعفایل خود برنامههر ذخیره‌سازی (iCloud، Files، شخص ثالث)
حالتکپی فایل برای گیرندهImport یا Export برای برنامه جاری
رابطمنوی سیستم (Action Sheet)مرورگر فایل کامل
بازگشتنتیجه را برنمی‌گرداندURL فایل انتخاب شده از طریق delegate

UIDocumentInteractionController نیازی به delegate برای کار پایه ندارد — منو حتی بدون پیاده‌سازی متدها نمایش داده می‌شود. UIDocumentPickerViewController بدون delegate بی‌فایده است — نتیجه انتخاب پردازش نخواهد شد. انتخاب API به سناریو بستگی دارد: ارسال فایل → UIDocumentInteractionController، دریافت فایل → UIDocumentPickerViewController.

سؤالات متداول

UIDocumentInteractionController در iOS چیست؟

UIDocumentInteractionController — یک کنترل‌کننده UIKit برای پیش‌نمایش اسناد و انتقال فایل‌ها بین برنامه‌ها از طریق عملکرد Open In و Preview داخلی است.

چگونه فایل را در برنامه دیگر از طریق UIDocumentInteractionController باز کنیم؟

یک نمونه ایجاد کنید، ویژگی url را روی فایل مقصد تنظیم کنید، delegate را مشخص کنید و presentOptionsMenu را فراخوانی کنید. سیستم لیست برنامه‌های پشتیبانی‌کننده از این نوع فایل را نمایش می‌دهد.

Preview چه تفاوتی با Quick Look دارد؟

UIDocumentInteractionController Preview — نمایش‌دهنده داخلی برای یک سند با قابلیت‌های پایه است. Quick Look (QLPreviewController) — یک فریمورک جداگانه با پشتیبانی از نمایش دسته‌ای، افزونه‌ها و فرمت‌های فایل اضافی است.

آیا برای UIDocumentInteractionController باید delegate پیاده‌سازی کرد؟

Delegate برای کار پایه اختیاری است — منو بدون آن نمایش داده می‌شود. Delegate فقط برای Preview (متد previewControllerForDocumentInteractionController) و ردیابی تکمیل ارسال فایل الزامی است.

UIDocumentInteractionController چه تفاوتی با UIDocumentPickerViewController دارد؟

UIDocumentInteractionController فایل موجود را از برنامه به برنامه دیگر ارسال می‌کند. UIDocumentPickerViewController فایل را از منبع خارجی به برنامه جاری انتخاب می‌کند. اولی برای ارسال، دومی برای دریافت است.

خلاصه

  • UIDocumentInteractionController — کنترل‌کننده iOS برای مشاهده و ارسال فایل‌ها بین برنامه‌ها، قابل دسترس از iOS 2.0.
  • Preview نمایش داخلی PDF، تصاویر و اسناد اداری را بدون کتابخانه‌های شخص ثالث فراهم می‌کند.
  • Open In فایل را به sandbox برنامه انتخاب شده کپی می‌کند — تغییرات به برنامه اصلی بازگردانده نمی‌شوند.
  • UIDocumentInteractionControllerDelegate انیمیشن‌ها، موقعیت منو و تکمیل ارسال را از طریق متدهای delegate مدیریت می‌کند.
  • presentOptionsMenu منوی سیستم را با برنامه‌های موجود برای این نوع فایل نمایش می‌دهد.
  • UIActivityViewController جایگزین مدرن‌تری برای ارسال فایل‌ها از iOS 6 است.
  • تفاوت اصلی با UIDocumentPickerViewController: اولی فایل را از برنامه ارسال می‌کند، دومی فایل را به برنامه انتخاب می‌کند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید