如何在目标 C 中将 QLPreviewController 添加为子视图

Posted

技术标签:

【中文标题】如何在目标 C 中将 QLPreviewController 添加为子视图【英文标题】:How to add QLPreviewController as Subview in objective C 【发布时间】:2011-12-13 17:24:34 【问题描述】:

是否可以将 QLPreviewController 作为子视图添加到 UIView。

我试过这样

[self.view addSubview:previewViewController.view] 

我也打了reloadData

[previewViewController reloadData];

我检查了这个 URL Adding QLPreviewController as subview doesn't load PDF 。但是我不明白self.pdfPreviewView是什么

请指导我如何将 QLPreviewController 添加为子视图..

【问题讨论】:

ios6 开始,这已过时:请参阅 oleb.net/blog/2012/10/remote-view-controllers-in-ios-6 【参考方案1】:

是的,有可能,请看下面的代码:

QLPreviewController* preview = [[QLPreviewController alloc] init];
preview.dataSource = self;
preview.delegate = self;
[self addChildViewController:preview];//*view controller containment
//set the frame from the parent view
CGFloat w= self.quickLookView.frame.size.width; 
CGFloat h= self.quickLookView.frame.size.height;
preview.view.frame = CGRectMake(0, 0,w, h);
[self.quickLookView addSubview:preview.view];    
[preview didMoveToParentViewController:self];
//save a reference to the preview controller in an ivar
self.previewController = preview;

【讨论】:

您好,感谢您的回复。我在这里有几个疑问..因为我是 iOS 初学者。你说为 previewController 创建 ival。数据类型是 UIViewController/QLPreviewController 怎么样? quickLookView 的意思是,请给我更多详细信息? +1 @NagaHarishMovva:只需在您的对象中创建一个名为 previewController 的 UIViewController 属性 - 这应该可以做到;) @AzzUrr1 我会检查的,谢谢 @railwayparade :它工作得很好,但我在 iOS 5.0 中遇到了一个问题,当我旋转视图时,应用程序崩溃并抛出一个 execption:[QLPreviewController numberOfPreviewItems]: message sent to deallocated instance 0x9153600],请帮帮我。 这只有在父控制器的视图已经在屏幕上可见的情况下才能正常工作。如果您尝试从父控制器的 loadView 方法添加 QLPreviewController 作为子控制器,这将不起作用。如果来自 viewDidAppear,你必须打电话【参考方案2】:

Swift 3.x

private var pVC: QLPreviewController?

override func viewDidLoad() 
    super.viewDidLoad()
    // I do not not why, but it needs to be setup after delay.
    DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: setupPreview)


private func setupPreview() 
    if (pVC != nil)  return 

    let preview = QLPreviewController()
    preview.dataSource = self
    preview.delegate = self

    preview.view.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: previewView.frame.size)
    previewView.addSubview(preview.view)

    preview.didMove(toParentViewController: self)
    pVC = preview

【讨论】:

以上是关于如何在目标 C 中将 QLPreviewController 添加为子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在目标 C 中将 QLPreviewController 添加为子视图

如何在目标 c 中将 PFFILE 设置为本地 UIImage

如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]

如何在目标 C 中将字符串转换为整数? [复制]

如何在目标c中将类对象转换为json字符串

如何在目标 c 中将 SOAP 数据发布到服务器