ios - PageViewController点击事件

标签 ios objective-c uipageviewcontroller

我创建了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];
     }
 }

更新

我试图传递单击的索引,但是无论我单击哪个pagecontentview,它始终显示0。
- (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);
}

最佳答案

在您的ViewController中添加TapGestureRecognizer

 - (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);
}

关于ios - PageViewController点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45627250/

相关文章:

ios - 没有足够的单元格在 UITableView 中使用

ios - 拍摄 View 快照时出现 fatal error : unexpectedly found nil while unwrapping an Optional value

iphone - 启动应用程序后,如何从 Default.png 淡入?

ios - 在选择 UITableViewCell 时旋转图像

ios - 地理围栏可以包含许多其他地理围栏吗

objective-c - 在 NSView 中滚动 NSString

ios - 在哪里添加 UISegmentedController; loadView、initWithNibName : bundle:, 还是 viewDidLoad?

ios - 显示大型 3D Touch 快捷方式小部件

objective-c - 如何在基于页面 View 的应用程序中加载 pdf 文件

ios - UINavigationbar 项目位置不正确