2013-08-25 84 views
0

我是IOS開發的新手,我的問題是我使用UIScrollView和UIPageControl向用戶顯示指導信息。我通過設置文件的所有者創建了一個與GuideViewController相關的xib文件。我設置了內容大小,並在xib文件中靜態添加子視圖。但是我遇到了一些奇怪的事情,scrollview只顯示屏幕上的第一個子視圖,所有的下面的顯示只是白色背景(當我滾動時)。 以下是代碼:UIScrollVIew只顯示第一個靜態子視圖,UIPageControl的代理

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    NSInteger numberOfPages = 2; 
    self.pageControl.numberOfPages = numberOfPages; 
    self.pageControl.currentPage = 0; 

    self.pageScroll.delegate = self; 
    self.pageScroll.contentSize = CGSizeMake(self.view.frame.size.width * numberOfPages, 
             self.view.frame.size.height); 
    self.pageControl.currentPageIndicatorTintColor = [UIColor redColor]; 
} 

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

我GOOGLE了很多尋找答案,但這裏仍停留。 我也對這句話感到困惑「當用戶點擊頁面控件移動到下一頁或上一頁時,控件發送UIControlEventValueChanged事件以供代碼」在xcode幫助中處理「。看來UIPageControl沒有委託屬性,所以我如何捕獲事件的UIControlEventValueChanged事件。

其實我是在故事板上開發我的主UI,但我有點需要單獨的UI設計來爲故事板製作更多的空間,所以我使用xib文件作爲其他部分的UI,我不知道這是否會導致一些問題。由於

+0

我解決了第一個問題了,我想的UIScrollView會安排子視圖我,但我變成了我需要設置子視圖的原點自己。 – zhouwubai

+0

只是你自己的問題。謝謝。 – MasterRazer

+0

@MasterRazer但代表問題如何。 UIPageControl沒有委託屬性,我如何捕獲UIControlEventValueChanged事件。謝謝。我仍在Google上搜索。 :) – zhouwubai

回答

0

我的解決辦法是這樣的:

添加IBAction爲你的頭:

- (IBAction)changePage; 

不要忘記設置出口,爲的PageControl屬性:

IBOutlet UIPageControl *pageControl; 
@property (nonatomic, retain) IBOutlet UIPageControl* pageControl; 

添加布爾控制更新:

BOOL pageControlBeingUsed; 

這裏是我的完整標題:

@interface ViewC : UIViewController <UIScrollViewDelegate> { 

    IBOutlet UIScrollView *scrollView; 
    IBOutlet UIPageControl *pageControl; 

    BOOL pageControlBeingUsed; 
} 

@property (nonatomic, retain) IBOutlet UIScrollView* scrollView; 
@property (nonatomic, retain) IBOutlet UIPageControl* pageControl; 

- (IBAction)changePage; 

@end 

(不要忘了合成propertys) 您viewDidLoad方法已經做了,但你沒有連接布爾給該方法的第二個步驟!試試這個:

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    if (!pageControlBeingUsed) { 
     // Switch the indicator when more than 50% of the previous/next page is visible 
     CGFloat pageWidth = self.scrollView.frame.size.width; 
     int page = floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
     self.pageControl.currentPage = page; 
    } 
} 

在末尾加上此代碼爲IBAction爲,當在按鈕被按下的PageControl站點的更改。

- (IBAction)changePage { 
    // update the scroll view to the appropriate page 
    CGRect frame; 
    frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage; 
    frame.origin.y = 0; 
    frame.size = self.scrollView.frame.size; 
    [self.scrollView scrollRectToVisible:frame animated:YES]; 

    pageControlBeingUsed = YES; 

} 

重要: 與在廈門國際銀行 「的值改爲」 選項連接IBAction爲。和控制器的委託設置本身:

enter image description here

然後它應該是這樣的: enter image description here

這就是全部!希望你解決你的問題。我會很高興,如果你給我的awnser「蜱」,如果它幫助你!

問候,

諾亞

+0

感謝您的回答,我會檢查並給您反饋。 – zhouwubai

+0

它的作品!我也學習捕捉行動的新方法。謝謝。但我仍然有一個問題,爲什麼我們需要將## ## if語句添加到## scrollViewDidScroll ##中。這似乎沒有必要。 – zhouwubai

+0

它僅用於內存處理。如果內容很多,滾動視圖會導致內存泄漏。就這樣離開! :) – MasterRazer

相關問題