2017-05-08 4 views
-5

UIPageViewController를 사용하는 응용 프로그램을 개발하므로 왼쪽에서 오른쪽으로 스 와이프하여 페이지 (ViewControllers)를 탐색 할 수 있습니다. 내 원래 게시물 이후, 나는 코드를 작성했습니다. 하지만 세 가지 오류가 나타납니다.UIPageViewController 대리자, 데이터 소스 및 인터페이스 오류

오류 1 : 유형의 개체에없는 속성 '대표는' 'IntroPages'는 오류 2 : 부동산의 'IntroPages' 오류 3 종류의 객체를 찾을 수 없습니다 '데이터 소스는': 'IntroPages'에 대한 눈에 띄는 @interface 선언하지

세 가지 오류는 모두 viewDidLoad의 첫 번째 섹션 ({} 괄호 안에있는 섹션)에 있습니다. 처음 두 코드는 viewDidLoad 바로 밑의 코드이고 세 번째 5 행은 아래 코드입니다.

델리게이트와 데이터 소스는 .h 파일에서 참조됩니다. 왜 그들은 발견되지 않았습니까? Wy는 'IntroPages'에 대한 @interface가 없습니까?

코드는 다음과 같습니다.

IntroPages.h

#import <UIKit/UIKit.h> 

@interface IntroPages : UIViewController 
<UIPageViewControllerDelegate, UIPageViewControllerDataSource> 

@end 

페이지가 너무 많아서하지 않은 경우, 당신은 다음과 같이 자신의 ID의 배열을보기 컨트롤러의 배열을 만들 수 있습니다

#import "IntroPages.h" 

@interface IntroPages() 

@end 

@implementation IntroPages 
{ 
    NSArray *myViewControllers; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.delegate = self; 
    self.dataSource = self; 

    UIViewController *p1 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"Intro1ID"]; 
    UIViewController *p2 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"Intro2ID"]; 
    UIViewController *p3 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"Intro3ID"]; 
    UIViewController *p4 = [self.storyboard 
          instantiateViewControllerWithIdentifier:@"Intro4ID"]; 

    myViewControllers = @[p1,p2,p3,p4]; 

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

    NSLog(@"loaded!"); 
} 


@end 
+0

그래서 우연한 문제는 무엇입니까 ... 그리고 무엇을 시도 했나요? ...? 게시물 ur 코드. –

+0

나는 내가있는 곳에 게시물을 편집했다. 코드가 포함되어 있습니다. – thejdah

답변

0

IntroPages.m :

// assuming this 
@property (strong, nonatomic) IBOutlet UIPageViewController *pageViewController; 
@property (strong, nonatomic) NSArray *pages; 

// then, to setup, say these are the page ids... 
NSArray *vcIds = @[ @"id0", @"id1", ... ]; 
self.pages = [NSMutableArray array]; 

for (NSString *vcId in vcIds) { 
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:vcId]; 
    [self.pages addObject:vc]; 
} 

[self.pageViewController setViewControllers:self.pages direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

UIPageViewControllerDataSource 주어진 vc 전후에보기 컨트롤러를 요청합니다. 전달 된 vc를 페이지 배열에서 조회하여 올바른 결과를 얻으십시오.

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 
    NSUInteger index = [self.pages indexOfObject:viewController]; 
    return (index)? self.pages[index-1] : 0; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 
    NSUInteger index = [self.pages indexOfObject:viewController]; 
    return (index<self.pages.count-1)? self.pages[index+1] : self.pages[self.pages.count-1]; 
} 
+0

배열에 5 페이지 밖에 없습니다. 제안한 코드는 자습서에서 본 코드와 유사합니다. 이 튜토리얼은 제목과 이미지가 배열에 있었지만 실제로 VC에 할당되지 않았습니다. 그들은 단지 vc를 만들기 위해 어레이에서 꺼내졌습니다. 나는 배열에서 실제 vcs를 호출하는 것이 비슷하다고 가정했다. 도움을 주셔서 감사합니다. – thejdah

+0

이걸 사용하는 스토리 보드가 원본보기 컨트롤러 -> 페이지보기 컨트롤러 -> 배열에서 호출 된 모든보기를 포함한다고 가정하여 정답입니까? – thejdah

+0

@thejdah, 예. 사실, 우리는'self.storyboard'로 제안 된 코드에서 스토리 보드를 얻습니다. 그래서'self' 인 vc가 그 id를 가진 vcs와 같은 스토리 보드에 정의되어 있어야합니다. 다른 스토리 보드에 vcs를 정의해야한다면 알려주세요. 어떻게해야하는지 보여줄 수 있습니다 – danh