0

Я реализовал UIPageViewController, который я хочу, чтобы иметь возможность прокручивать бесконечно вправо (как в случае с пользователем влево) и иметь возможность прокручивать назад в другом направлении вплоть до начала. Тем не менее, я не хочу, чтобы пользователь мог прокручивать влево (как при проглатывании пользователя вправо) на первой странице, хотя у меня только три страницы, которые зацикливаются, как я могу это сделать?Пользовательский интерфейс просмотра страницы Прокрутка прокрутки не прокручивается назад

Я уже понял, как сделать бесконечную прокрутку с тремя контрольными точками справа (как в пользовательских прокрутках влево), но когда пользователь пытается прокрутить влево (как при нажатии пользователем вправо) это ошибка, и экран белеет?

Может ли кто-нибудь улучшить этот код, чтобы пользователь мог бесконечно прокручивать оба пути, а не только один? и, если это возможно, не позволяет пользователю прокручиваться назад на самой первой панели? Благодарю.

PageViewController.h

#import <UIKit/UIKit.h> 

@interface PageViewController : UIPageViewController 
<UIPageViewControllerDelegate, UIPageViewControllerDataSource> 
@end 

PageViewController.m

#import "PageViewController.h" 

@interface PageViewController() 

@end 

@implementation PageViewController 
{ 
    NSArray *myViewControllers; 


} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

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

    UIViewController *p1 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"ContentViewController1"]; 
    UIViewController *p2 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"ContentViewController2"]; 
    UIViewController *p3 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"ContentViewController3"]; 

    myViewControllers = @[p1,p2,p3]; 

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


    NSLog(@"loaded!"); 

} 

-(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 

ответ

0

Вы можете использовать флаг, чтобы знать начальный View (первый вид) .then использовать включить этот свиток и отключить метод, чтобы предотвратить красть ,

-(void)setScrollEnabled:(BOOL)enabled forPageViewController:(UIPageViewController*)pageViewController{ 
for(UIView* view in pageViewController.view.subviews){ 
    if([view isKindOfClass:[UIScrollView class]]){ 
     UIScrollView* scrollView=(UIScrollView*)view; 
     [scrollView setScrollEnabled:enabled]; 
     return; 
    } 
} 

Надеюсь, что это сработает.

Смежные вопросы