希望这能让你摆脱痛苦......
QuartzImages.m 中的 QuartzPDFView 类实际上并没有在 MainViewController 的 viewDidLoad 中实例化。在那里,它的类标识仅存储在提供菜单的表视图引用的字典/数组中。
实际的石英视图对象保存在 QuartzViewController 中,它本身是在 MainViewController 的 didSelectRowAtIndexPath 方法中创建的。
当创建 QuartzViewController 并将其推送到导航控制器时,QuartzViewController 的 viewDidLoad 触发,将 self.quartzView 添加为子视图。 quartzView 的 getter 方法(在 QVC 的 viewDidLoad 之上)最终创建了石英视图对象。
所以要告诉石英视图加载给定页面,这是一种方法(可能不是最优雅的):
- 向 QuartzPDFView 类添加 pageNumber 属性
- 在 MainViewController 的 didSelectRowAtIndexPath 方法中设置该属性
小问题是 QuartzViewController 中的 quartzView 属性可以是不同种类的石英视图(不仅仅是 QuartzPDFView)。因此,在尝试设置 pageNumber 属性之前,您需要检查它是否为 QuartzPDFView。
第 1 步:将 pageNumber 属性添加到 QuartzPDFView 类:
//QuartzImages.h
@interface QuartzPDFView : QuartzView
{
CGPDFDocumentRef pdf;
int pageNumber;
}
@property (nonatomic, assign) int pageNumber;
-(void)drawInContext:(CGContextRef)context;
@end
//QuartzImages.m
@implementation QuartzPDFView
@synthesize pageNumber;
...
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, pageNumber);
...
第二步:在MainViewController的didSelectRowAtIndexPath方法中设置该属性
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
QuartzViewController *targetViewController = [self controllerAtIndexPath:indexPath];
if ([targetViewController.quartzView isKindOfClass:[QuartzPDFView class]])
{
((QuartzPDFView *)targetViewController.quartzView).pageNumber = 1;
//replace 1 with whatever number or variable you want
}
[[self navigationController] pushViewController:targetViewController animated:YES];
}
顺便说一下,示例应用中的 pdf 似乎没有超过一页。