UIDocumentInteractionController คือตัวควบคุม iOS สำหรับการแสดงตัวอย่างเอกสารและแชร์ไฟล์ระหว่างแอปพลิเคชัน มันใช้ฟีเจอร์ Open In ซึ่งอนุญาตให้ผู้ใช้เปิดไฟล์ในแอปที่เข้ากันได้ ส่งทางอีเมล หรือบันทึกไปยังที่เก็บข้อมูลคลาวด์ ตามเอกสารของนักพัฒนา Apple (2025) ตัวควบคุมนี้ยังรองรับการแสดงตัวอย่างในตัวสำหรับการดู PDF รูปภาพ และเอกสารสำนักงาน
ประเด็นสำคัญ
UIDocumentInteractionController คือคลาส UIKit ที่ให้อินเทอร์เฟซระบบสำหรับทำงานกับเอกสาร แตกต่างจาก UIDocumentPickerViewController ที่เลือกไฟล์ ตัวควบคุมนี้ทำงานกับไฟล์ที่มีอยู่ของแอปและเสนอการดำเนินการแก่ผู้ใช้: แสดงตัวอย่าง เปิดในแอปอื่น พิมพ์ หรือส่ง
ตัวควบคุมไม่ใช่ ViewController — มันไม่ได้ถูกเรียกผ่าน present แต่จะแสดงเมนูการดำเนินการของระบบผ่านเมธอด presentOptionsMenu หรือ presentPreview เมนูจะแสดงแอปทั้งหมดที่ลงทะเบียนเพื่อจัดการกับประเภทไฟล์ที่กำหนด
UIDocumentInteractionController พร้อมใช้งานตั้งแต่ iOS 2.0 และเป็นหนึ่งใน API ที่เก่าแก่ที่สุดสำหรับการทำงานกับเอกสาร แม้จะมีอายุมาก แต่ก็ยังคงมีความเกี่ยวข้องสำหรับการใช้งานฟีเจอร์ Open In และการแสดงตัวอย่างในตัวโดยไม่ต้องใช้ไลบรารีของบุคคลที่สาม
Preview คือตัวแสดงเอกสารในตัวที่ให้บริการโดย UIDocumentInteractionController รองรับ PDF รูปภาพ ไฟล์ข้อความ และเอกสารสำนักงาน (รวมถึง .doc, .xls, .ppt) การแสดงตัวอย่างจะแสดงพร้อมแอนิเมชันการเปลี่ยนภาพคล้ายกับ Quick Look มาตรฐาน
ในการเริ่มการแสดงตัวอย่าง ให้เรียกเมธอด presentPreview ตัวควบคุมต้องการตัวแทนที่ใช้เมธอด previewControllerForDocumentInteractionController ซึ่งส่งคืน UIViewController สำหรับแสดงเอกสาร โดยปกติจะส่งคืน self หรือตัวควบคุมการนำทาง
การแสดงตัวอย่างในตัว ไม่ต้องการเฟรมเวิร์กหรือใบอนุญาตเพิ่มเติม มันทำงานกับไฟล์ใด ๆ ที่ URL ถูกส่งต่อไปยังคุณสมบัติ url ผู้ใช้สามารถเลื่อนดูหน้า PDF ซูมรูปภาพ และคัดลอกข้อความจากเอกสาร
Open In คือฟีเจอร์หลักของ UIDocumentInteractionController มันแสดงรายการแอปที่สามารถเปิดประเภทไฟล์ที่กำหนด ผู้ใช้เลือกแอปเป้าหมาย และ iOS จะคัดลอกไฟล์ไปยังแซนด์บ็อกซ์ของแอปนั้น เปิดใช้แอปเพื่อทำงานกับเอกสาร
รายการแอปถูกสร้างขึ้นโดยอัตโนมัติตามรายการ Document Type ที่ลงทะเบียนใน Info.plist ของแอปอื่น หากแอปลงทะเบียนการรองรับ PDF แอปนั้นจะปรากฏในเมนู Open In สำหรับไฟล์ PDF ระบบยังแสดงการดำเนินการมาตรฐาน: พิมพ์ ส่งทางอีเมล บันทึกไปยังไฟล์
Open In คัดลอกไฟล์ — แอปเป้าหมายได้รับสำเนาของตัวเอง ดังนั้นการเปลี่ยนแปลงจะไม่ถูกบันทึกกลับไปยังแอปต้นทาง หากคุณต้องการแก้ไขพร้อมบันทึก ให้ใช้ UIDocumentPickerViewController ในโหมดส่งออกพร้อม URL ที่มีขอบเขตความปลอดภัย
ตั้งแต่ iOS 6 มี UIActivityViewController ซึ่งรองรับการแชร์ไฟล์ด้วยเช่นกัน แตกต่างจาก UIDocumentInteractionController UIActivityViewController จะแสดงแผ่นกิจกรรมของระบบพร้อมรองรับ AirDrop อีเมล ข้อความ และ UIActivity ที่กำหนดเอง สำหรับการแชร์ไฟล์อย่างง่าย แนะนำให้ใช้ UIActivityViewController เป็น API ที่ทันสมัยกว่า
การใช้งาน Open In ผ่าน UIDocumentInteractionController ต้องใช้โค้ดเพียงไม่กี่บรรทัด: สร้างอินสแตนซ์ ตั้งค่า URL และตัวแทน เรียก presentOptionsMenu ตัวควบคุมจะรวบรวมรายการแอปที่มีอยู่โดยอัตโนมัติตามประเภทไฟล์
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
)
}
}
ในการแสดงตัวแสดงในตัวแทนเมนู Open In ให้ใช้เมธอด presentPreview ตัวควบคุมจะแสดงเอกสารแบบเต็มหน้าจอพร้อมความสามารถในการเลื่อน ตัวแทนต้องใช้เมธอด previewControllerForDocumentInteractionController ซึ่งส่งคืน UIViewController สำหรับการแสดงผล
UIDocumentInteractionControllerDelegate จัดการการแสดงและการปิดเมนูและการแสดงตัวอย่าง ตัวแทนใช้เมธอดที่เป็นทางเลือก: documentInteractionControllerWillPresentOpenInMenu สำหรับแอนิเมชันการปรากฏ documentInteractionControllerDidDismissOpenInMenu สำหรับการทำความสะอาดทรัพยากรหลังจากปิดเมนู
เมธอดที่สำคัญสำหรับการแสดงตัวอย่างคือ previewControllerForDocumentInteractionController ซึ่งต้องส่งคืน UIViewController สำหรับแสดงเอกสาร หากไม่ได้ใช้เมธอดหรือส่งคืน nil การแสดงตัวอย่างจะไม่เริ่มต้น โดยปกติจะส่งคืน self หรือ UINavigationController ที่มี self
ตัวควบคุมยังรองรับเมธอด documentInteractionController:didEndSendingToApplication ซึ่งถูกเรียกหลังจากส่งไฟล์ไปยังแอปอื่นสำเร็จ ซึ่งช่วยให้ทำความสะอาดไฟล์ชั่วคราวหรืออัปเดตอินเทอร์เฟซหลังจากกลับไปยังแอป
UIDocumentInteractionController และ UIDocumentPickerViewController แก้ปัญหางานที่แตกต่างกัน แม้ว่าทั้งคู่จะทำงานกับเอกสาร ความแตกต่างหลัก: UIDocumentInteractionController ถ่ายโอนไฟล์ที่มีอยู่ไปยังแอปอื่น ในขณะที่ UIDocumentPickerViewController เลือกไฟล์จากแหล่งภายนอกสำหรับแอปปัจจุบัน
| พารามิเตอร์ | UIDocumentInteractionController | UIDocumentPickerViewController |
|---|---|---|
| วัตถุประสงค์ | ส่งไฟล์ไปยังแอปอื่น | เลือกไฟล์จากแหล่งอื่น |
| แหล่งที่มา | ไฟล์ของแอปเอง | พื้นที่เก็บข้อมูลใด ๆ (iCloud, ไฟล์, บุคคลที่สาม) |
| โหมด | สำเนาไฟล์ไปยังผู้รับ | นำเข้าหรือส่งออกสำหรับแอปปัจจุบัน |
| อินเทอร์เฟซ | เมนูระบบ (Action Sheet) | เบราว์เซอร์ไฟล์แบบเต็ม |
| การส่งคืน | ไม่ส่งคืนผลลัพธ์ | URL ของไฟล์ที่เลือกผ่านตัวแทน |
UIDocumentInteractionController ไม่ต้องการ ตัวแทนสำหรับการทำงานพื้นฐาน — เมนูจะแสดงแม้ไม่มีการใช้เมธอด UIDocumentPickerViewController ที่ไม่มีตัวแทนนั้นไร้ประโยชน์ — ผลลัพธ์การเลือกจะไม่ถูกประมวลผล การเลือก API ขึ้นอยู่กับสถานการณ์: การส่งไฟล์ → UIDocumentInteractionController การรับไฟล์ → UIDocumentPickerViewController
คำถามที่พบบ่อย
UIDocumentInteractionController คือตัวควบคุม UIKit สำหรับการแสดงตัวอย่างเอกสารและถ่ายโอนไฟล์ระหว่างแอปผ่านฟีเจอร์ Open In และการแสดงตัวอย่างในตัว
สร้างอินสแตนซ์ ตั้งค่าคุณสมบัติ url ไปยังไฟล์เป้าหมาย ระบุตัวแทน และเรียก presentOptionsMenu ระบบจะแสดงรายการแอปที่รองรับประเภทไฟล์ที่กำหนด
UIDocumentInteractionController Preview คือตัวแสดงในตัวสำหรับเอกสารเดี่ยวที่มีความสามารถพื้นฐาน Quick Look (QLPreviewController) เป็นเฟรมเวิร์กแยกต่างหากที่รองรับการดูเป็นชุด ส่วนขยาย และรูปแบบไฟล์เพิ่มเติม
ตัวแทนเป็น ทางเลือก สำหรับการทำงานพื้นฐาน — เมนูจะแสดงโดยไม่มีตัวแทน ตัวแทนจำเป็นเฉพาะสำหรับการแสดงตัวอย่าง (เมธอด previewControllerForDocumentInteractionController) และสำหรับติดตามการเสร็จสิ้นการส่งไฟล์
UIDocumentInteractionController ส่งไฟล์ที่มีอยู่จากแอปไปยังแอปอื่น UIDocumentPickerViewController เลือกไฟล์จากแหล่งภายนอกเข้าสู่แอปปัจจุบัน อันแรกสำหรับการส่ง อันหลังสำหรับการรับ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม