Надеюсь, это избавит вас от страданий ...
Класс QuartzPDFView в QuartzImages.m фактически не создается в viewDidLoad MainViewController. Там его идентификатор класса хранится только в словаре / массиве, на который ссылается табличное представление, предоставляющее меню.
Фактические объекты представления кварца хранятся в QuartzViewController, который сам создается в методе didSelectRowAtIndexPath в MainViewController.
Когда QuartzViewController создается и помещается в контроллер навигации, запускается viewDidLoad QuartzViewController, который добавляет self.quartzView в качестве подпредставления. Метод getter для quartzView (над viewDidLoad в QVC) наконец создает объект представления кварца.
Итак, чтобы указать кварцевому представлению загрузить данную страницу, вот один из способов сделать это (может быть, не самый элегантный):
- Добавление свойства pageNumber в класс QuartzPDFView
- Установите это свойство в методе didSelectRowAtIndexPath в MainViewController
Незначительная проблема заключается в том, что свойство quartzView в QuartzViewController может быть различными видами кварцевых представлений (не только QuartzPDFView). Поэтому вам нужно проверить, что это QuartzPDFView, прежде чем пытаться установить свойство pageNumber.
Шаг 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);
...
Шаг 2 : установите это свойство в методе didSelectRowAtIndexPath в MainViewController
- (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 в образце приложения не содержит более одной страницы.