Halo teman-teman, saya mendapat masalah ini: Mencoba menampilkan tampilan siapa yang tidak ada dalam hierarki jendela! Seseorang tahu cara membuat UINavigationController untuk membuka File PDF di iOS Saya membuat Layanan Ketergantungan untuk Android dan iOS tetapi hanya berfungsi di Android dan iOS, ada yang PDF muncul dan ada yang tidak, saya mencoba mencari cara untuk mengimplementasikan dengan UIViewController tetapi tidak berfungsi. adalah kelasnya
public class SaveFile : ISaveFile
{
public async Task<string> SaveFiles(string filename, byte[] bytes)
{
try
{
var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
var filePath = Path.Combine(documentsPath, filename);
File.WriteAllBytes(filePath, bytes);
OpenPDF(filePath);
//OpenFile(filePath);
return filePath;
}
catch(Exception ex)
{
Debug.WriteLine("Error" + ex.Message + ex.StackTrace);
return "";
}
}
public void OpenPDF(string filePath)
{
FileInfo fi = new FileInfo(filePath);
QLPreviewController previewController = new QLPreviewController();
previewController.DataSource = new PDFPreviewControllerDataSource(fi.FullName, fi.Name);
//UIView uIView = previewController.View;
UINavigationController controller = FindNavigationController();
controller.ModalPresentationStyle = UIModalPresentationStyle.FullScreen;
if (controller != null)
controller.PresentViewController(previewController, true,null);
}
/*
public void OpenFile(string filePath)
{
var viewer = UIDocumentInteractionController.FromUrl(NSUrl.FromFilename(filePath));
var controller = GetVisibleViewController();
viewer.PresentOpenInMenu(controller.View.Frame, controller.View, true);
}
//*/
private UINavigationController FindNavigationController()
{
foreach (var window in UIApplication.SharedApplication.Windows)
{
if (window.RootViewController.NavigationController != null)
return window.RootViewController.NavigationController;
else
{
UINavigationController val = CheckSubs(window.RootViewController.ChildViewControllers);
if (val != null)
return val;
}
}
return null;
}
private UINavigationController CheckSubs(UIViewController[] controllers)
{
foreach (var controller in controllers)
{
if (controller.NavigationController != null)
return controller.NavigationController;
else
{
UINavigationController val = CheckSubs(controller.ChildViewControllers);
if (val != null)
return val;
}
}
return null;
}
public class PDFItem : QLPreviewItem
{
string title;
string uri;
public PDFItem(string title, string uri)
{
this.title = title;
this.uri = uri;
}
public override string ItemTitle
{
get { return title; }
}
public override NSUrl ItemUrl
{
get { return NSUrl.FromFilename(uri); }
}
}
public class PDFPreviewControllerDataSource : QLPreviewControllerDataSource
{
string url = "";
string filename = "";
public PDFPreviewControllerDataSource(string url, string filename)
{
this.url = url;
this.filename = filename;
}
public override IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)
{
return (IQLPreviewItem)new PDFItem(filename, url);
}
public override nint PreviewItemCount(QLPreviewController controller)
{
return 1;
}
}
}