0

我一直在寻找答案,但没有成功。我希望能够在 UICollectionView 中选择一个项目并转到它的详细视图,一个 UIPageViewController 水平滚动三个不同的视图控制器。

问题是在使用 UIPageViewController 时,我无法弄清楚如何将数据从主视图传递到详细视图。我可以将它传递给普通的detailViewController,但使用UIPageViewController,我的listItems 在到达pageViewController 时为空。

如何将图像和标签传递给我的 page1ViewController,我想我在 detailPagingViewController 中缺少一个步骤?我还在学习中,非常感谢所有帮助!

这是故事板:http: //pbrd.co/1y2rdB2

在 collectionViewController 中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetailPageVC"]) {
    NSIndexPath *indexPath = [self.collectionView indexPathForCell:sender];
    DetailPagingViewController *destViewController = segue.destinationViewController;

    PFObject *object = [imagesFilesArray objectAtIndex:indexPath.row];
    ListItems *listItem = [[ListItems alloc] init];
    listItem.name = [object objectForKey:@"name"];
    listItem.imageFile = [object objectForKey:@"imageFile"];
    destViewController.listItem = listItem;
}

}

详细PagingViewController.h

@interface DetailPagingViewController : UIPageViewController
<UIPageViewControllerDelegate, UIPageViewControllerDataSource>

@property (nonatomic, strong) ListItems *listItem;

@end

detailPagingViewController.m

@interface DetailPagingViewController ()

@property (strong, nonatomic) UIPageViewController *pageViewController;
@property (strong, nonatomic) NSArray *contentPageRestorationIDs;

@end


@implementation DetailPagingViewController
{
    NSArray *myViewControllers;
}

@synthesize listItem;

-(void)viewDidLoad
{
    [super viewDidLoad];

    self.delegate = self;
    self.dataSource = self;

    UIViewController *p1 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"Page1VC"];
    UIViewController *p2 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"Page2VC"];
    UIViewController *p3 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"Page3VC"];

    myViewControllers = @[p1,p2,p3];

    [self setViewControllers:@[p1]
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:NO completion:nil];

}

-(UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
    return myViewControllers[index];
}

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];

    --currentIndex;
    currentIndex = currentIndex % (myViewControllers.count);
    return [myViewControllers objectAtIndex:currentIndex];
}

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];

    ++currentIndex;
    currentIndex = currentIndex % (myViewControllers.count);
    return [myViewControllers objectAtIndex:currentIndex];
}

-(NSInteger)presentationCountForPageViewController:
(UIPageViewController *)pageViewController
{
    return myViewControllers.count;
}

-(NSInteger)presentationIndexForPageViewController:
(UIPageViewController *)pageViewController
{
    return 0;
}

@end

在 pageViewController.h

@interface Page1ViewController : UIViewController

@property (weak, nonatomic) IBOutlet PFImageView *mainImage;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@property (nonatomic, strong) ListItems *listItem;

@end

在 pageViewController.m

@implementation Page1ViewController

@synthesize mainImage, listItem, nameLabel;

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated
{
    mainImage.file = listItem.imageFile;

    nameLabel.text = listItem.name;
}

@end
4

0 回答 0