Xamarin表单中的UIDocumentPickerViewController选择

Xamarin表单中的UIDocumentPickerViewController选择,xamarin,xamarin.ios,xamarin.forms,uidocumentpickervc,Xamarin,Xamarin.ios,Xamarin.forms,Uidocumentpickervc,我一直在努力让我的文档采集器充分工作。现在它显示视图控制器,但我不知道如何等待或获得结果 在swift中,您只需编写void documentPicker(UIDocumentPickerViewController控制器,didPickDocumentTurl…方法,完成后将转到那里 但是在Xamarin中,它一定不是那么简单。我已经从调用它的类、在我的AppDelegate.cs类以及在我的Main.cs类中编写了该方法。除非我写错了,否则没有一个方法是有效的 我所拥有的是 public a

我一直在努力让我的文档采集器充分工作。现在它显示视图控制器,但我不知道如何等待或获得结果

在swift中,您只需编写
void documentPicker(UIDocumentPickerViewController控制器,didPickDocumentTurl…
方法,完成后将转到那里

但是在Xamarin中,它一定不是那么简单。我已经从调用它的类、在我的
AppDelegate.cs
类以及在我的
Main.cs
类中编写了该方法。除非我写错了,否则没有一个方法是有效的

我所拥有的是

public async Task<string> pickResume()
{
    string path = string.Empty;

    var controller = new UIViewController();
    var docVC = new UIDocumentPickerViewController(new string[] { "org.openxmlformats.wordprocessingml.document", "com.microsoft.word.doc" }, UIDocumentPickerMode.Import);
    UIViewController topController = getTopViewController();
    topController.PresentViewController(docVC, true, null); 

    return path;
}

 void documentPicker(UIDocumentPickerViewController controller, NSUrl didPickDocumentAtURL)
 {
     Console.WriteLine("done"); 
 }
公共异步任务pickResume()
{
字符串路径=string.Empty;
var controller=新的UIViewController();
var docVC=新的UIDocumentPickerWebController(新字符串[]{“org.openxmlformats.wordprocessingml.document”,“com.microsoft.word.doc”},UIDocumentPickerMode.Import);
UIViewController-topController=getTopViewController();
topController.PresentViewController(docVC,true,null);
返回路径;
}
无效文档选择器(UIDocumentPickerViewController控制器,NSUrl DIDPickDocumentTurl)
{
控制台。写入线(“完成”);
}

getTopViewController()
只是获取俯视图控制器的一个辅助方法,这样我就可以向DocumentPicker演示它了,而且比我想象的要简单得多

UIDocumentPickerViewController
有两个
eventhandler
DidPickDocument
被取消
,所以我只是将它们分配给两个不同的方法并完成了

public async Task<string> pickResume()
{
    string path = string.Empty;
    var controller = new UIViewController();

    var docVC = new UIDocumentPickerViewController(new string[] { "org.openxmlformats.wordprocessingml.document", "com.microsoft.word.doc" }, UIDocumentPickerMode.Import);
    docVC.DidPickDocument += DocVC_DidPickDocument;
    docVC.WasCancelled += DocVC_WasCancelled;

    UIViewController topController = getTopViewController();
    topController.PresentViewController(docVC, true, null); 

    return await GetDocPath(new CancellationTokenSource());
}

private void DocVC_WasCancelled(object sender, EventArgs e)
{
    //Handle being cancelled 
}

private void DocVC_DidPickDocument(object sender, UIDocumentPickedEventArgs e)
{
    //Handle document selection
}
公共异步任务pickResume()
{
字符串路径=string.Empty;
var controller=新的UIViewController();
var docVC=新的UIDocumentPickerWebController(新字符串[]{“org.openxmlformats.wordprocessingml.document”,“com.microsoft.word.doc”},UIDocumentPickerMode.Import);
docVC.DidPickDocument+=docVC\u DidPickDocument;
docVC.wascelected+=docVC\u wascelected;
UIViewController-topController=getTopViewController();
topController.PresentViewController(docVC,true,null);
返回等待GetDocPath(新的CancellationTokenSource());
}
私有void DocVC_已取消(对象发送方,事件参数e)
{
//处理被取消
}
私有void DocVC_DidPickDocument(对象发送方,UIDocumentPickedEventArgs e)
{
//处理文档选择
}

找到了答案,这比我想象的要容易得多

UIDocumentPickerViewController
有两个
eventhandler
DidPickDocument
被取消
,所以我只是将它们分配给两个不同的方法并完成了

public async Task<string> pickResume()
{
    string path = string.Empty;
    var controller = new UIViewController();

    var docVC = new UIDocumentPickerViewController(new string[] { "org.openxmlformats.wordprocessingml.document", "com.microsoft.word.doc" }, UIDocumentPickerMode.Import);
    docVC.DidPickDocument += DocVC_DidPickDocument;
    docVC.WasCancelled += DocVC_WasCancelled;

    UIViewController topController = getTopViewController();
    topController.PresentViewController(docVC, true, null); 

    return await GetDocPath(new CancellationTokenSource());
}

private void DocVC_WasCancelled(object sender, EventArgs e)
{
    //Handle being cancelled 
}

private void DocVC_DidPickDocument(object sender, UIDocumentPickedEventArgs e)
{
    //Handle document selection
}
公共异步任务pickResume()
{
字符串路径=string.Empty;
var controller=新的UIViewController();
var docVC=新的UIDocumentPickerWebController(新字符串[]{“org.openxmlformats.wordprocessingml.document”,“com.microsoft.word.doc”},UIDocumentPickerMode.Import);
docVC.DidPickDocument+=docVC\u DidPickDocument;
docVC.wascelected+=docVC\u wascelected;
UIViewController-topController=getTopViewController();
topController.PresentViewController(docVC,true,null);
返回等待GetDocPath(新的CancellationTokenSource());
}
私有void DocVC_已取消(对象发送方,事件参数e)
{
//处理被取消
}
私有void DocVC_DidPickDocument(对象发送方,UIDocumentPickedEventArgs e)
{
//处理文档选择
}

在我的情况下,我也必须订阅
didpickdocumentals
。出于某种原因,
DidPickDocument
从未被调用,即使我把
AllowsMultipleSelection=false
放在我的情况下,我也必须订阅
didpickdocumentals
。出于某种原因,
DidPickDocument
从未被调用过如果我输入
AllowsMultipleSelection=false