代码之家  ›  专栏  ›  技术社区  ›  jbtamares

xamarin.ios UidocumentPickerView控制器

  •  1
  • jbtamares  · 技术社区  · 6 年前

    我有一个关于iOS文档选取器的问题。

    我已包含iCloud容器/已启用iCloud以进行配置。还添加了 Cloudkit Xamarin.ios本身的要求。但是,启动弹出菜单以显示iOS的浏览文件菜单时出现问题。

    var documentPicker = new UIDocumentPickerViewController(allowedUtis, UIDocumentPickerMode.Import);
    
    documentPicker.DidPickDocument += DocumentPicker_DidPickDocument;
    documentPicker.WasCancelled += DocumentPicker_WasCancelled;
    documentPicker.DidPickDocumentAtUrls += DocumentPicker_DidPickDocumentAtUrls;
    documentPicker.WasCancelled += DocumentPicker_WasCancelled;
    
    private void DocumentPicker_DidPickDocumentAtUrls(object sender, UIDocumentPickedAtUrlsEventArgs e)
    {
         var control = (UIDocumentPickerViewController)sender;
         foreach (var url in e.Urls)
             DocumentPicker_DidPickDocument(control, new UIDocumentPickedEventArgs(url));
    
             control.Dispose();
    }
    

    似乎didpickdocument/didpickdocumentaturls事件无法启动,除了设置我的设置、授权、info.plist之外,还有其他需要的选项/权限可以让我使用iOS的文档选取器吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   FreakyAli    6 年前

    嗯,我最近做的,它在我的Xamarin表单应用程序中工作得很好:

    private void ShowDocsPicker()
        {
            try
            {
                var docPicker = new UIDocumentPickerViewController(new string[]
                { UTType.Data, UTType.Content }, UIDocumentPickerMode.Import);
                docPicker.WasCancelled += DocPicker_WasCancelled;
                docPicker.DidPickDocumentAtUrls += DocPicker_DidPickDocumentAtUrls;
                var _currentViewController = GetCurrentUIController();
                if (_currentViewController != null)
                    _currentViewController.PresentViewController(docPicker, true, null);
            }
            catch (Exception ex)
            {
              //Exception Logging
            }
        }
    

    获取当前的uiviewController,如下所示:

      public UIViewController GetCurrentUIController()
        {
            UIViewController viewController;
            var window = UIApplication.SharedApplication.KeyWindow;
            if (window == null)
            {
                return null;
            }
    
            if (window.RootViewController.PresentedViewController == null)
            {
                window = UIApplication.SharedApplication.Windows
                         .First(i => i.RootViewController != null &&
                                     i.RootViewController.GetType().FullName
                                     .Contains(typeof(Xamarin.Forms.Platform.iOS.Platform).FullName));
            }
    
            viewController = window.RootViewController;
    
            while (viewController.PresentedViewController != null)
            {
                viewController = viewController.PresentedViewController;
            }
    
            return viewController;
        }
    

    然后像这样添加文档选择事件:

     private void DocPicker_DidPickDocumentAtUrls(object sender, UIDocumentPickedAtUrlsEventArgs e)
        {
         //Action to perform on document pick
        }
    

    如果有查询,则还原。