我是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,我不知道这是否会导致一些问题。感谢
答案 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的委托设置为自身:
然后它应该是这样的:
就是这样!希望你能解决你的问题。如果你给我的芒果“嘀嗒”,如果它帮助你,我会很高兴的!
问候,
诺亚