尝试从UIViewController将属性分配给UIScrollView类

时间:2011-11-29 18:21:32

标签: ios xcode pdf uiscrollview ios5

我正在尝试向下浏览一些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中选择了哪个部分或行,

pdfIndexRowint都是0并返回didSelectRowAtIndexPath

所以有两个问题:

  • 为什么当我在sv.pdfIndexSection中为ViewController分配一个int值时,它是否保留ScrollView中的值。

  • 有没有更好的方法来实现这个概念?

1 个答案:

答案 0 :(得分:0)

问题在于,在PDFScrollView中,您正在访问initWithFrame方法中的字段pdfIndexSectionpdfIndexRow,但您只需在调用它之后设置其值

换句话说,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之前有时间正确初始化您可能拥有的任何其他字段。