我在自定义QLPreviewController
的外观方面存在问题。
我们可以通过在导航控制器中推送它或在ModalViewController中呈现它来显示QLPreviewController。由于我的navigationController的栏是自定义的(tintColor),我正在推动QLPreviewController来保留我的配色方案。但是当我推送它时,QLPreviewController似乎有一些问题:我需要系统地调用 [qlpvc reloadData] 以便显示我的文件。
在iOS [已删除]中,即使使用reloadData,也不会以推送方式显示任何内容(实际上它会以随机方式显示)。所以我认为只使用可靠的Modal方式会很有趣。
Soooo我的观点是我想在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;博士版: 如何设法自定义模态 QLPreviewController的外观?特别是navigationBar的tintColor?
非常感谢。
答案 0 :(得分:3)
子类QLPreviewController并更改viewDidLoad:
中的tintColor等。
答案 1 :(得分:3)
这样可行,但我不知道它是否会被Apple拒绝,因为它不是已发布的方法,可能会在未来的操作系统版本中中断。适用于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];
}
答案 2 :(得分:0)
如果您尝试在整个应用程序中维护简单样式(如tintColor),则应考虑在许多UIView类上使用UIAppearance选择器。以下示例自定义UINavigationBar的所有实例,包括QLPreviewController中显示的实例:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//..
[self initAppearance];
return YES;
}
-(void)initAppearance{
UINavigationBar* defaultNavigationBar = [UINavigationBar appearance];
UIImage *backgroundImage = [UIImage imageNamed:@"MY_IMAGE.png"]
NSDictionary *defaultNavigationBarDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Futura-Medium" size:19], NSFontAttributeName,
[UIColor blueColor], UITextAttributeTextColor,
[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0.0f, 2.0f)], UITextAttributeTextShadowOffset,
nil];
defaultNavigationBar.titleTextAttributes = defaultNavigationBarDictionary; //iOS5
//[defaultNavigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; //iOS5
[defaultNavigationBar setBarTintColor:[UIColor redColor]]; //iOS7
[defaultNavigationBar setShadowImage:[[UIImage alloc] init]]; //iOS6, removes shadow
[defaultNavigationBar setTitleVerticalPositionAdjustment:0.0f forBarMetrics:UIBarMetricsDefault]; //iOS5
[defaultNavigationBar setBackIndicatorImage:[UIImage imageNamed:@"BACK_ARROW.png"]]; //iOS7
[defaultNavigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"BACK_ARROW.png"]]; //iOS7
}