我正在尝试向下浏览一些UITableViewControllers
,最终得到一个pdf文件,该文件是根据用户选择的部分和行加载的。我试图将部分和行信息传递给PDFViewController
(其工作),但我无法将选定的部分和行信息传递给实际加载PDF的UIScrollView
。我试图在实例化PDFScrollView
时设置属性,但在加载PDFScrollView
时不保留该值。
PDFViewController.m中的代码
#import "PDFViewController.h"
#import "PDFScrollView.h"
#import "ProtocolDetailViewController.h"
@implementation PDFViewController
@synthesize detailIndexRow;
@synthesize detailIndexSection;
- (void)loadView {
[super loadView];
// Log to check to see if detailIndexSection has correct value
NSLog(@"pdfVC section %d", detailIndexSection);
NSLog(@"pdfVc row %d", detailIndexRow);
// Create PDFScrollView and add it to the view controller.
PDFScrollView *sv = [[PDFScrollView alloc] initWithFrame:[[self view] bounds]];
sv.pdfIndexSection = detailIndexSection;
[[self view] addSubview:sv];
}
现在来自PDFScrollView.m
其中pdfIndexSection
未保留上述代码中detailIndexSection
#import "PDFScrollView.h"
#import "TiledPDFView.h"
#import "PDFViewController.h"
#import <QuartzCore/QuartzCore.h>
@implementation PDFScrollView
@synthesize pdfIndexRow;
@synthesize pdfIndexSection;
- (id)initWithFrame:(CGRect)frame
{
// Check to see value of pdfIndexSection
NSLog(@"PDF section says %d", pdfIndexSection);
NSLog(@"PDF row says %d", pdfIndexRow);
if ((pdfIndexSection == 0) && (pdfIndexRow == 0)) {
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"cardiacarrestgen.pdf" withExtension:nil];
pdf = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfURL);
}
else if ((pdfIndexSection == 0) && (pdfIndexRow == 1)) {
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"cardiacarrestspec.pdf" withExtension:nil];
pdf = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfURL);
}
无论pdfIndexSection
中选择了哪个部分或行, pdfIndexRow
和int
都是0
并返回didSelectRowAtIndexPath
。
所以有两个问题:
为什么当我在sv.pdfIndexSection
中为ViewController
分配一个int值时,它是否保留ScrollView
中的值。
有没有更好的方法来实现这个概念?
答案 0 :(得分:0)
问题在于,在PDFScrollView中,您正在访问initWithFrame方法中的字段pdfIndexSection
和pdfIndexRow
,但您只需在调用它之后设置其值。
换句话说,PDFScrollView中的- (id)initWithFrame:(CGRect)frame
应该重写为
// PDFScrollView
-(id)initWithFrame:(CGRect)frame
pdfIndexRow:(int) pdfindexRow
pdfIndexSection:(int)pdfIndexSection
然后在PDFViewController中将其初始化为
PDFScrollView *sv = [[PDFScrollView alloc] initWithFrame:[[self view] bounds]
pdfIndexRow:detailIndexRow
pdfIndexSection:detailIndexSection ];
不同之处在于,现在您在init方法中传递值,因为您在那里使用它们。另一种方法是不在initWithFrame方法中执行PDF加载逻辑,而是在单独的方法中。这样,您可以保持initWithFrame简单,并在加载PDF之前有时间正确初始化您可能拥有的任何其他字段。