2012-07-24 2 views
1

스크롤 뷰와 페이지 컨트롤이 구현 된 VC가 있습니다. 그것은 3 개의 페이지를 가지고있다. 그것은 모두 정확하게 셋업되고 잘 작동한다. 내가 할 수 있기를 원하는 것은 사용자가 누르는 버튼에 따라 VC가 다른 페이지에로드되도록하는 것입니다.특정 페이지에 UIScrollView + UIPageControl이있는 ViewController 푸시

방법에서

께 버튼 I는 (페이지의 하단에있는 기포에 의해 입증되는 바와 같이) VC가로드가 정확한 페이지에로드

ViewController *vc = [[ViewController alloc] init]; 
vc.pageControl.currentPage = 2; 
[self.navigationController pushViewController:vc animated:YES]; 

를 호출하지만 정보를 표시 페이지 [0]에서. 스크롤을 시작하면, 내가하는 일과 상관없이 페이지 [0]으로 돌아갑니다.

가장 좋은 추측은 어떤 페이지를 표시하고 싶은지에 따라 특정 x 원본으로 VC로드를 만들어야하지만 내 것과 관련이없는 항목을 찾을 수 없었기 때문에 매우 분실했습니다. .

감사합니다.

편집 : 다음은 VC 클래스의 코드입니다. 나는이 글을 쓰지 않았고 PageControl로 작업 한 것은 처음이므로, 내가 배우면서 배우려고 노력하고있다.

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

    self.scrollView = [[UIScrollView alloc] init]; 
    self.scrollView.pagingEnabled = TRUE; 
    self.scrollView.showsVerticalScrollIndicator = NO; 
    self.scrollView.showsHorizontalScrollIndicator = NO; 
    self.scrollView.delegate = self; 

    firstPage = [[UIView alloc] init]; 
    firstPage.tag = 0; 

    secondPage = [[UIView alloc] init]; 
    secondPage.tag = 1; 

    thirdPage = [[UIView alloc] init]; 
    thirdPage.tag = 2; 

    pages = [[NSArray alloc] initWithObjects:firstPage, secondPage, thirdPage, nil]; 

    // Page Control 
    self.pageControl = [[UIPageControl alloc] init]; 
    self.pageControl.numberOfPages = 3; 
    self.pageControl.currentPage = 0; 

    [self.view addSubview:self.scrollView]; 
    [self.view addSubview:self.pageControl]; 
} 
return self; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

// First Page Setup 
// 
[self setupFirstPage]; 

// Second Page Setup 
// 
[self setupSecondPage]; 

// Third Page Setup 
// 
[self setupThirdPage]; 

// Frame everything 
// 
CGRect screenFrame = [[UIScreen mainScreen] applicationFrame]; 
CGRect navBarFrame = self.navigationController.navigationBar.frame; 

self.scrollView.frame = CGRectMake(0, navBarFrame.size.height, 320, screenFrame.size.height - navBarFrame.size.height); 
self.pageControl.frame = CGRectMake(0, screenFrame.size.height - 70, 320, 20); 

firstPage.frame = CGRectMake(0, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height); 
secondPage.frame = CGRectMake(320 * secondPage.tag, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height); 
thirdPage.frame = CGRectMake(320 * thirdPage.tag, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height); 

// Add Subviews 
// 
[self.scrollView addSubview:firstPage]; 
[self.scrollView addSubview:secondPage]; 
[self.scrollView addSubview:thirdPage]; 

self.scrollView.contentSize = CGSizeMake(320 * pages.count, self.scrollView.frame.size.height); 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
CGFloat pageWidth = self.scrollView.frame.size.width; 
int page = floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
self.pageControl.currentPage = page; 
} 
+0

문제는 당신의'ViewController' 코드 어딘가에입니다. 'currentPage' setter를 오버라이드 (override) 할 필요가있어, 초기화에 의해 갱신되지 않는 것을 갱신 할 필요가 있습니다. 코드를 더 게시하면 도움이 될 수 있습니다. – Dima

+0

VC 클래스에서 코드를 추가했습니다. 임의의 이름을 사물에 사용했지만 setupFirstPage/SecondPage/ThirdPage는 모두 동일한 기능을 가지고 있습니다. 레이블을 생성하고 원하는 곳에 배치합니다. 나는 - (void) setPosition 함수가 구현되었지만 코드가 추가되지 않아 위치를 변경하려고 계획했던 곳에서 가능할 수 있음을 알 수 있습니까? – TheJer

답변

2

시도 페이지 번호 설정 직후에이 기능을 추가하고 전화 :

- (void)pageSelectorChanged 
{ 
    CGRect frame = self.scrollView.frame; 
    frame.origin.x = frame.size.width * self.pageControl.currentPage; 
    frame.origin.y = 0; 
    [self.scrollView scrollRectToVisible:frame animated:NO]; 
} 
+1

감사합니다 디마. 비슷한 일을 시도했지만 scrollRectToVisible은 제가 놓친 것입니다. – TheJer

관련 문제