0

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

- (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;
}

我搜索了很多以找到答案,但仍然停留在这里。我也对xcode帮助中的这句话“当用户点击页面控件移动到下一页或上一页时,控件发送UIControlEventValueChanged事件以供委托处理”感到困惑。似乎 UIPageControl 没有委托属性,所以我如何捕获UIControlEventValueChanged事件。

实际上我是在storyboard上开发我的主UI,但是我有点想要单独的UI设计来为storyboard腾出更多的空间,所以我使用xib文件来做其他部分的UI,我不知道这是否会导致一些问题。谢谢

4

1 回答 1

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 方法完成了,但您没有将布尔值连接到该方法!尝试这个:

- (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 中的“值已更改”选项连接。并将控制器的委托设置为自身:

在此处输入图像描述

然后应该是这样的: 在此处输入图像描述

就这些!希望你解决了你的问题。如果它对您有帮助,如果您给我的遮阳篷打勾,我会很高兴!

问候,

诺亚

于 2013-08-25T21:21:15.620 回答