我已经创建了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);
}
TapGesture识别器在你的MainNewsPageContentViewController中并为每个添加一个标签? –
可以请你举例说明吗? – hotspring
我刚刚添加了手势识别器,但没有奏效。我在这个问题中更新了我的源代码。我不知道我做错了什么? – hotspring