0

DocumentPicker を完全に機能させることに行き詰まっています。現在、ビューコントローラーが表示されていますが、結果を待つ方法や取得する方法がわかりません。

Swift では、メソッドを記述するだけで、void documentPicker(UIDocumentPickerViewController controller, didPickDocumentAtUrl...終了するとそこに移動します。

しかし、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"); 
 }

getTopViewController()DocumentPicker を表示できるように、トップ ビュー コントローラーを取得するヘルパー メソッドにすぎません。

4

1 に答える 1

3

考えてみると、私が考えていたよりもずっと簡単です。

UIDocumentPickerViewControllerには 2 つのがあるのでEventHandlers、それらDidPickDocumentWasCancelled2 つの異なるメソッドに割り当てて完了しました。

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
}
于 2016-07-08T19:19:25.340 に答える