UIScrollVIew仅显示第一个静态子视图,即UIPageControl的委托

时间:2013-08-25 20:27:48

标签: ios uiscrollview uipagecontrol

我是IOS开发的新手,我的问题是我使用UIScrollView和UIPageControl向用户显示指南信息。我通过设置文件所有者创建了与 GuideViewController 相关的xib文件。我设置内容大小并在xib文件中静态添加子视图。但是我遇到了一些奇怪的事情,scrollview只显示屏幕上的第一个子视图,所有后面的显示只是白色背景(当我滚动时)。 以下是代码:

- (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设计为storyboard腾出更多空间,所以我使用xib文件来处理其他部分UI,我不知道这是否会导致一些问题。感谢

1 个答案:

答案 0 :(得分:0)

我的解决方案是:

在标题中添加IBAction:

 - (IBAction)changePage;

别忘了为pageControl设置Outlet和属性:

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

添加页面控件更新的BOOLEAN:

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

(别忘了合成属性) 你已经使用viewdidLoad方法做了第二步,但是你没有将Boolean连接到方法!试试这个:

- (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与xib中的“value changed”选项相连。并将Controller的委托设置为自身:

enter image description here

然后它应该是这样的: enter image description here

就是这样!希望你能解决你的问题。如果你给我的芒果“嘀嗒”,如果它帮助你,我会很高兴的!

问候,

诺亚