0

我想做的是什么?有一个MainViewController其中有两个 UIViews 一个加载UITableViewController和另一个UIPageViewController。在TableViewController中,有 pdf 的名称列表。但是当我点击pdf列表时,它不会PageViewController在上下文中加载新的pdf。

Pdf 文件名存储在 .plist 文件中,Pdfs 从 NSBundle 或 NSDocumentDirectory 中获取

在 TableViewController 中

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
    {
        [tableView deselectRowAtIndexPath:indexPath animated:YES];    
        Play *play = (Play *)[[self.sectionInfoArray objectAtIndex:indexPath.section] play];
        Quotation *qute = [play.Details objectAtIndex:indexPath.row];
        if ([qute.Key isEqualToString:@"ABC"])
        {
            AppDelegate *app = [[UIApplication sharedApplication]delegate];
            app.strpdfname = qute.Value;
            MiddleViewController *mid = [[MiddleViewController alloc] initWithNibName:@"MiddleViewController" bundle:nil];
            ContentViewController *cvc = [[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil];
            [mid viewDidLoad];
            [cvc viewDidLoad];
        }
        else
        {
            MainViewController *vc = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
            [vc viewDidLoad];
        }
    }

In PageViewController
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.modelArray = [[NSMutableArray alloc] init];

        AppDelegate *app = [[UIApplication sharedApplication] delegate];
        self.pdfName = app.strpdfname;

        NSString *path = [[NSBundle mainBundle] pathForResource:pdfName ofType:nil];
        NSURL *targetURL = [NSURL fileURLWithPath:path];

        originalPDF = CGPDFDocumentCreateWithURL((__bridge CFURLRef)targetURL);
        numberOfPages = CGPDFDocumentGetNumberOfPages(originalPDF);

        for (int index = 0; index < numberOfPages ; index++)
        {
            [self.modelArray addObject:[NSString stringWithFormat:@"%d",index]];
        }

        self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl                                               navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
        self.pageViewController.delegate = self;
        self.pageViewController.dataSource = self;
        contentViewController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil];
        contentViewController.labelContents = [self.modelArray objectAtIndex:0];
        NSArray *viewControllers = [NSArray arrayWithObject:contentViewController];
        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward
                                       animated:NO 
                                     completion:nil];
        [self addChildViewController:self.pageViewController];
        [self.view addSubview:self.pageViewController.view];
        [self.pageViewController didMoveToParentViewController:self];       
        CGRect pageViewRect = self.view.frame;
        pageViewRect = CGRectInset(pageViewRect, 0.0, 0.0);
        self.pageViewController.view.frame = pageViewRect;
        self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
    }

    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
      viewControllerBeforeViewController:(UIViewController *)viewController
    {
        NSUInteger currentIndex = [self.modelArray indexOfObject:[(ContentViewController *)viewController labelContents]];
        if(currentIndex == 0)
        {
            return nil;
        }
        contentViewController = [[ContentViewController alloc] init];
        contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1];
        return contentViewController;
    }

    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
    {
        NSUInteger currentIndex = [self.modelArray indexOfObject:[(ContentViewController *)viewController labelContents]];
        if(currentIndex == self.modelArray.count-1)
        {
            return nil;
        }
        contentViewController = [[ContentViewController alloc] init];
        contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex + 1];
        return contentViewController;
    }

    - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
                   spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
    {
        UIViewController *currentViewController =   [self.pageViewController.viewControllers objectAtIndex:0];
        NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
        self.pageViewController.doubleSided = NO;
        return UIPageViewControllerSpineLocationMin;
    }

In ContentViewController of PageViewController
    -(UIImage*) imageFromPDF:(CGPDFDocumentRef)pdf withPageNumber:(NSUInteger)pageNumber withScale:(CGFloat)scale
    {
        CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdf,pageNumber);
        CGRect tmpRect = CGPDFPageGetBoxRect(pdfPage,kCGPDFMediaBox);
        CGRect rect =   CGRectMake(tmpRect.origin.x,tmpRect.origin.y,tmpRect.size.width*scale,tmpRect.size.height*scale);
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextTranslateCTM(context,-50,rect.size.height-30);
        CGContextScaleCTM(context,scale,-scale);
        CGContextDrawPDFPage(context,pdfPage);
        UIImage* pdfImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return pdfImage;
    }

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        AppDelegate *app = [[UIApplication sharedApplication] delegate];
        self.pdfName = app.strpdfname;
        i = [labelContents intValue];    
        NSString *path = [[NSBundle mainBundle] pathForResource:pdfName ofType:nil];
        if (i!=0)
        {
            CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:path]);
            UIImage *img = [[UIImage alloc] init];
            img = [self imageFromPDF:pdf withPageNumber:i withScale:1];
            UIImageView *imgview1 = [[UIImageView alloc] initWithImage:img];
            [self.view addSubview:imgview1];
        }
        else 
        {
            UIImage *imgmain = [UIImage imageNamed:@"Diary4.png"];
            UIImageView *imgvmain = [[UIImageView alloc] initWithImage:imgmain];
            imgvmain.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y,580,self.view.frame.size.height);
            [self.view addSubview:imgvmain];
        }   
    }

在 MainViewController

-(void)viewDidload
    {
        leftView = [[UIView alloc] initWithFrame:CGRectMake(5,25, 200,715)];
        leftView.backgroundColor = [UIColor clearColor];    
        tvc = [[TableViewController alloc] initWithStyle:UITableViewStylePlain];
        tvc.plays = self.plays;
        tvc.view.frame = leftView.frame;
        leftView.clipsToBounds = YES;
        [leftView addSubview:tvc.view];
        [self.view addSubview:leftView];
        middleView = [[UIView alloc] initWithFrame:CGRectMake(107, 30, 575, 670)];
        mvc = [[MiddleViewController alloc] initWithNibName:@"MiddleViewController" bundle:nil];
        [mvc.view setFrame:middleView.frame];
        [middleView addSubview:mvc.view];
        [self.view addSubview:middleView];
    }
4

1 回答 1

0

由于没有重新加载数据的方法UIPageViewController。我使用的是UIPageViewControllerinUIViewController而不是我使用UINavigationControllerUIPageViewController可以重新加载动态数据的方法。因此,单击UITableViewController,数据将发送到UINavigationController--> UIPageViewController。这解决了上述问题。

于 2013-01-21T04:59:40.377 回答