2012-07-24 64 views
1

我有一個VC,其中實現了scrollview和pagecontrol。它有三個頁面,都設置正確並且工作正常。我想要做的是將VC加載到不同的頁面,具體取決於用戶按下的按鈕。將帶有UIScrollView + UIPageControl的ViewController拖到特定頁面上

在該方法中按鈕調用我有

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

當VC加載時,它被加載到正確的網頁(如由氣泡在頁面底部證明),但它顯示的信息從第[0]頁開始。如果我開始滾動,無論我做什麼,它都會跳回頁面[0]。

我最好的猜測是我需要將VC加載到一個特定的x來源,具體取決於我想要顯示的頁面,但是我一直沒能找到與此相關的任何內容,所以我很迷茫。

感謝任何幫助。

編輯:這裏是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'設置程序,以通過初始化來更新未更新的內容。如果你張貼更多的代碼,它可能會有所幫助。 – Dima 2012-07-24 19:43:58

+0

我在VC類的代碼中添加了。我爲事物使用了任意名稱,但setupFirstPage/SecondPage/ThirdPage都是相同的功能,只是創建標籤並將它們放在我們想要的地方。我確實看到 - (void)setPosition函數已經實現,但是沒有添加代碼,所以它可能是他們計劃改變位置的地方? – TheJer 2012-07-24 20:27:14

回答

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 2012-07-24 20:59:40

相關問題