2017-08-11 92 views
1

我已經創建了PageViewController,我無法弄清楚如何捕獲正在被點擊的頁面索引。PageViewController點擊事件

有了這些信息,我可以繼續向DetailViewController加載相應的信息。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    arrPageTitles = @[@"0",@"1",@"2",@"3", @"4"]; 
    self.newsPageImages = @[@"img1.jpg", @"img2.jpg", @"img3.png", @"img4.jpg", @"img5.jpg"]; 

    // Create page view controller 
    self.PageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"]; 
    self.PageViewController.dataSource = self; 
    self.PageViewController.delegate = self; 
    MainNewsPageContentViewController *startingViewController = [self viewControllerAtIndex:0]; 
    NSArray *viewControllers = @[startingViewController]; 
    [self.PageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    // Change the size of page view controller 
    self.PageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30); 
    [self addChildViewController:PageViewController]; 
    [self.view addSubview:PageViewController.view]; 
    [self.PageViewController didMoveToParentViewController:self]; 
    [self.view bringSubviewToFront:self.pageControl]; 
    self.pageControl.numberOfPages = [self.arrPageTitles count]; 
    self.pageControl.currentPage = 0; 

    for (UITapGestureRecognizer * gesRecog in self.PageViewController.gestureRecognizers) 
    { 
     gesRecog.delegate = self; 
    } 
} 


-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (touch.view != self.PageViewController.view) 
    { 
     return NO; 
    } 
    return YES; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((MainNewsPageContentViewController*) viewController).pageIndex; 
    [self.pageControl setCurrentPage:index]; 

    if ((index == 0) || (index == NSNotFound)) 
    { 
     return nil; 
    } 
    index--; 

    return [self viewControllerAtIndex:index]; 
}  


- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = ((MainNewsPageContentViewController*) viewController).pageIndex; 
    [self.pageControl setCurrentPage:index]; 

    if (index == NSNotFound) 
    { 
     return nil; 
    } 
    index++; 

    if (index == [self.arrPageTitles count]) { 
     return nil; 
    } 
    return [self viewControllerAtIndex:index]; 
} 

- (MainNewsPageContentViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    if (([self.arrPageTitles count] == 0) || (index >= [self.arrPageTitles count])) { 
     return nil; 
    } 
    // Create a new view controller and pass suitable data. 
    MainNewsPageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainNewsPageContentViewController"]; 
    pageContentViewController.txtTitle = self.arrPageTitles[index]; 
    pageContentViewController.imageFile = self.newsPageImages[index]; 
    pageContentViewController.pageIndex = index; 
    return pageContentViewController; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Navigation 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"isMainDetailSegue"]) 
    { 
     DetailViewController *dvc = [segue destinationViewController]; 
     dvc.pageIndex = [self.pageControl currentPage]; 
    } 
} 

UPDATE

我試圖通過點擊指標,但它總是顯示爲0,不管我點擊哪個pagecontentview。

- (MainNewsPageContentViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    if (([self.arrPageTitles count] == 0) || (index >= [self.arrPageTitles count])) { 
     return nil; 
    } 
    // Create a new view controller and pass suitable data. 
    MainNewsPageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainNewsPageContentViewController"]; 
    pageContentViewController.txtTitle = self.arrPageTitles[index]; 
    pageContentViewController.imageFile = self.newsPageImages[index]; 
    pageContentViewController.pageIndex = index; 
    UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
    tap2.view.tag = index; 
    [pageContentViewController.view addGestureRecognizer:tap2]; 
    return pageContentViewController; 
} 

-(void) tap2 : (UITapGestureRecognizer*)sender 
{ 
    UIView *view = sender.view; //cast pointer to the derived class if needed 
    NSLog(@"%ld", (long)view.tag); 
} 
+0

TapGesture識別器在你的MainNewsPageContentViewController中併爲每個添加一個標籤? –

+0

可以請你舉例說明嗎? – hotspring

+0

我剛剛添加了手勢識別器,但沒有奏效。我在這個問題中更新了我的源代碼。我不知道我做錯了什麼? – hotspring

回答

2

添加TapGestureRecognizer在ViewControllers

- (MainNewsPageContentViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    if (([self.arrPageTitles count] == 0) || (index >= [self.arrPageTitles count])) { 
     return nil; 
    } 
    // Create a new view controller and pass suitable data. 
    MainNewsPageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainNewsPageContentViewController"]; 
    pageContentViewController.txtTitle = self.arrPageTitles[index]; 
    pageContentViewController.imageFile = self.newsPageImages[index]; 
    pageContentViewController.pageIndex = index; 
    UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap2:)]; 
    [pageContentViewController.view addGestureRecognizer:tap2]; 
    tap2.view.tag = index; 
    return pageContentViewController; 
} 

-(void) tap2 : (UITapGestureRecognizer*)sender 
{ 
    UIView *view = sender.view; //cast pointer to the derived class if needed 
    NSLog(@"%ld", (long)view.tag); 
} 
+0

非常感謝,它就像一個魅力!將索引傳遞給'tap2'方法的最佳方法是什麼? – hotspring

+0

請在編輯部分查看我的更新。我無法檢索正確的索引值。 – hotspring

+1

只是移動這一行'tap2.view.tag = index;'在這個下面'[pageContentViewController.view addGestureRecognizer:tap2];'必須工作 –

0

您可以添加以下里面UIPageViewcontroller's委託方法代碼

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{ 
    if (completed) { 
     currentPageIndex = [self indexOfController:[pageViewController.viewControllers lastObject]];  
    } 
} 

Helper方法是

-(NSInteger)indexOfController:(UIViewController *)viewController{ 
    for (int i = 0; i<[self.viewControllerArray count]; i++) { 
     if (viewController == [self.viewControllerArray objectAtIndex:i]) 
     { 
      return i; 
     } 
    } 
    return NSNotFound; 
} 
+0

'viewControllerArray'? – hotspring

+0

這就是你傳遞給你的pageViewController實例的viewControllers數組,我想你需要在同一個類中使它成爲全局的,然後你可以訪問 –

+0

我已經將你的答案添加到我的問題中,請參閱更新。這是行不通的。 – hotspring