2013-12-16 3 views
4

그래서 나는 어디에서나 보았고 내가 찾고있는 것을 찾을 수없는 것 같습니다. 기본적으로, 내 애플 리케이션에 3 가지보기 컨트롤러가 있습니다. (MainViewController, ChildViewController, TwitterViewController) 처음에는 ChildViewController를 사용하여 연습하고 있었고 레이블을 업데이트하여 현재 어떤 페이지에 있는지 알려주고있었습니다. 그러나 TwitterViewController를 "Page 2"로 추가하고 ChildViewController를 "Page 1"로 유지하려고합니다.두 개의 서로 다른보기 컨트롤러를 UIPageViewController에서 페이지로 사용

현재로서는 Delegate 및 DataSource로 설정된 MainViewController가 있으며 다른 페이지로 하나의 "ChildViewController"를 사용하여 코드를 다시 삽입합니다. 그 이후로 나에게 알려 주시면 알려주세요. 필요하다면 다시 말하려고 노력할 것입니다. 아래는 제 코드입니다.

MainViewController.m

#import "MainViewController.h" 
#import "ChildViewController.h" 
#import "TwitterViewController.h" 

@interface MainViewController() 

@end 

@implementation MainViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

    self.pageController.dataSource = self; 
    [[self.pageController view] setFrame:[[self view] bounds]]; 

    ChildViewController *initialViewController = [self viewControllerAtIndex:0]; 

    NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; 

    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    [self addChildViewController:self.pageController]; 
    [[self view] addSubview:[self.pageController view]]; 
    [self.pageController didMoveToParentViewController:self]; 

    UIPageControl *pageControl = [UIPageControl appearance]; 
    pageControl.pageIndicatorTintColor = [UIColor blackColor]; 
    pageControl.currentPageIndicatorTintColor = [UIColor redColor]; 

} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 
    NSUInteger index = [(ChildViewController *)viewController index]; 

    if (index == 0) { 
     return nil; 
    } 

    index--; 

    return [self viewControllerAtIndex:index]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 
    NSUInteger index = [(ChildViewController *)viewController index]; 

    index++; 

    if (index == 2) { 
     return nil; 
    } 

    return [self viewControllerAtIndex:index]; 
} 

- (ChildViewController *)viewControllerAtIndex:(NSUInteger)index { 
    ChildViewController *first = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; 
    first.index = index; 

    return first; 
} 

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { 
    return 2; 
} 

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { 
    return 0; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
@end 

ChildViewController.m

#import "ChildViewController.h" 
#import <QuartzCore/QuartzCore.h> 

@interface ChildViewController() 

@end 

@implementation ChildViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.screenNumber.text = [NSString stringWithFormat:@"This is Page #%d", self.index]; 
    self.screenNumber.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1]; 
    self.screenNumber.layer.cornerRadius =10;  
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:YES]; 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

TwitterViewController은 기본이고, 기록되지 않은 아직 .. 그냥 빈으로 시도 현재 ViewController입니다.

도움이 될 것입니다 !! 고마워요!

답변

4

각보기 컨트롤러에 대해 색인이 필요합니다. 따라서 UIViewController 클래스를 인덱스를 저장할 "인덱스"속성을 가진 기본 클래스로 만들면 좋습니다. 그런 다음이 기본 클래스를 서브 클래 싱하여 ChildViewController 및 TwitterViewContoller를 만듭니다. (ChildViewController *)viewControllerAtIndex:(NSUInteger)index(BaseViewController *)viewControllerAtIndex:(NSUInteger)index으로 변경하십시오.

메서드 내에서 색인에 따라 적절한보기 컨트롤러를 반환하십시오.

+0

아! 고맙습니다! 내가 잃어버린 것이 있다는 것을 알았다. 그래서, 기본적으로 새로운 수업을 만드십시오. 나는 당신의 예제 인 BaseViewController를 사용할 것이다. 이제 4 개의 별도 뷰 컨트롤러가 생겼습니다. 메인, 아동, 트위터, 지금베이스. 어디서 붙어있는 것 같아요베이스보기 컨트롤러에 정확히 넣어 무엇입니까? 나는 그것이 완전히 다른 질문이라고 생각한다. 나는 이것을 구현하고 어떻게 진행되는지 알려줄 것입니다! 다시 한 번 감사드립니다! –

관련 문제