2

我正在使用 iBook 之类的翻页转换 ( UIPageViewControllerTransitionStylePageCurl ) 来导航几个 UIViewController 页面。

因此我实现了 UIPageViewControllerDataSource委托函数

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerBeforeViewController:
(UIViewController *)viewController

当通过手势进行翻页时,这些会被正确调用。到目前为止,一切都很好。

除了这种默认行为之外,我还想在页面的两侧添加一个长按手势识别器,作为快速移动到最后一页或第一页的快捷方式。我已经设法将手势识别器添加到页面,但我不知道如何在没有内置滑动的情况下使页面移动。

如何以编程方式触发页面转向特定页面(UIViewController) ?

4

3 回答 3

3

当用户执行长滑动时,您可以将所需的 viewController(在您的情况下为第一页或最后一页)发送到方法的 viewControllers 参数:

- (void) setViewControllers:(NSArray*)viewControllers
                  direction:(UIPageViewControllerNavigationDirection)direction
                   animated:(BOOL)animated
                 completion:(void (^)(BOOL finished))completion;

有关更多详细信息,请参见 Graham 在以下位置的回答:

是否可以在 UIPageViewController 中以编程方式翻页?

如果我没看错,正在显示的 UIViewControllers 包含按钮,并且您希望它们也能够调用此函数。

要从正在显示的 UIViewControllers 中以编程方式调用该方法,您可以使 UIPageViewController 成为正在显示的 UIViewControllers 的委托,然后在按下按钮时调用委托方法。

一个不好的方法是向 UIViewControllers 发送一个反向指针(存储为 WEAK 属性!)到你的 UIPageViewController 并调用 respondsToSelector: 。

于 2012-06-06T15:02:50.750 回答
0

看看这个UIPageViewController方法:

- (void)setViewControllers:(NSArray *)viewControllers 
                 direction:(UIPageViewControllerNavigationDirection)direction
                  animated:(BOOL)animated 
                completion:(void (^)(BOOL finished))completion;

UIPageViewController 类参考

于 2012-05-28T22:27:05.897 回答
0

确保您没有设置self.pageViewController.datasource为 self. 然后您可以将此UIPageViewController功能与手势识别器一起使用。

   -[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
  1. 你可以设置一个手势识别器的委托并实现这个:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    
  2. 或者你可以添加一个手势识别器,比如UISwipeGestureRecognizer

于 2012-09-18T08:15:53.823 回答