在自定义QLPreviewController的外观时遇到问题。

我们可以通过将QLPreviewController推入导航控制器或将其呈现在ModalViewController中来显示它。由于我的navigationController的栏已进行了一点自定义(tintColor),因此我推动了QLPreviewController以保留我的配色方案。但是当我按下它时,QLPreviewController似乎有一些问题:我需要系统地调用 [qlpvc reloadData] ,以便显示我的文件。

在iOS [已编辑]中,即使使用reloadData,也不会以推送方式显示任何内容(实际上,它是以随机方式显示的)。因此,我认为仅使用可靠的Modal方法可能会很有趣。

所以我的意思是我想在ModalViewController中展示我的QLPreviewController。这样很好,但是我不能自定义viewController的外观。

例如,如果我在didSelectRowAtIndexPath中这样做:

(我没有消息来源,所以如果我做错了请原谅)

QLPreviewController *qlpvc = [[QLPreviewController alloc] init];
 qlpvc.dataSource = self; // Data Source Protocol & methods implemented of course
 No need for delegate in my case so //qlpvc.delegate = self;
 qlpvc.currentPreviewItemIndex = [indexPath.row];

 // The following doesn't work :
 [qlpvc.navigationController.navigationBar setTintColor:[UIColor redColor]];

 // The following doesn't work too :
 [qlpvc.modalViewController.navigationController.navigationBar setTintColor:[UIColor redColor]];

 [self presentModalViewController:qlpvc animated:YES];
 [qlpvc release];

tl; dr版本:如何管理自定义模态 QLPreviewController的外观?尤其是navigationBar的tintColor?

非常感谢。

最佳答案

这行得通,但是我不知道它是否会被Apple拒绝,因为它不是已发布的方法,并且可能会在将来的OS版本中中断。适用于iOS6。

添加到预览控制器数据源方法:

- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
    for (id object in controller.childViewControllers)
    {
        if ([object isKindOfClass:[UINavigationController class]])
        {
            UINavigationController *navController = object;
            navController.navigationBar.tintColor = [UIColor colorWithRed:0.107 green:0.360 blue:0.668 alpha:1.000];
        }
    }

    NSString *pathToPdfDoc = [[NSBundle mainBundle] pathForResource:@"MyPDFFile" ofType:@"pdf"];
    return [NSURL fileURLWithPath:pathToPdfDoc];
}

关于iphone - 自定义QLPreviewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6386492/

10-14 22:31