用分页添加UIScrollView到现有的UIViewController

我想添加一个UIScrollView与分页来通过我现有的视图控制器,这是我的应用程序的根视图不同的意见。 我也有标签栏和导航栏控制器。 我可以添加一个滚动视图到这个视图控制器来完成我想要的东西,如果是这样的话,有人可以指出我正确的方向如何去做?

这是我的视图控制器。

#import "KFBViewController.h" #import "ListViewController.h" #import "ActionAlertsViewController.h" #import "MarketUpdatesViewController.h" #import "AgStoriesViewController.h" #import "KFBNewsViewController.h" #import "MemberBenefits.h" #import "SocialNetworks.h" #import "WebViewController.h" #import "YouTubeView.h" #import "KFBFlickrViewController.h" #import "RSFM.h" #import "UAPush.h" #import "TUSafariActivity.h" @interface KFBViewController () { } @end @implementation KFBViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = NSLocalizedString(@"Home", @"Home"); self.tabBarItem.image = [UIImage imageNamed:@"home"]; self.navigationController.delegate = self; } return self; } - (void) showMenu { NSURL *urlToShare = [NSURL URLWithString:@"https://itunes.apple.com/us/app/kentucky-farm-bureau/id580530986?mt=8"]; NSArray *activityItems = @[urlToShare]; // TUSafariActivity *activity = [[TUSafariActivity alloc] init]; UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll]; [self presentViewController:activityVC animated:TRUE completion:nil]; } - (IBAction)gotoSecondView { YouTubeView *youTubeView = [[YouTubeView alloc] initWithNibName:@"YouTubeView" bundle:nil]; youTubeView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:youTubeView animated:YES completion:nil]; } - (IBAction)gotoPublicAffairs { ListViewController *publicAffairs = [[ListViewController alloc]initWithStyle:UITableViewStylePlain]; WebViewController *wvc = [[WebViewController alloc]init]; [publicAffairs setWebViewController:wvc]; publicAffairs.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:publicAffairs animated:YES]; } - (IBAction)gotoActionAlerts { ActionAlertsViewController *actionAlerts = [[ActionAlertsViewController alloc]initWithStyle:UITableViewStylePlain]; WebViewController *wvc = [[WebViewController alloc]init]; [actionAlerts setWebViewController:wvc]; actionAlerts.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:actionAlerts animated:YES]; } - (IBAction)gotoMarketUpdates { MarketUpdatesViewController *marketUpdates = [[MarketUpdatesViewController alloc]initWithStyle:UITableViewStylePlain]; WebViewController *wvc = [[WebViewController alloc]init]; [marketUpdates setWebViewController:wvc]; marketUpdates.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:marketUpdates animated:YES]; } - (IBAction)gotoAgStories { AgStoriesViewController *agStories = [[AgStoriesViewController alloc]initWithStyle:UITableViewStylePlain]; WebViewController *wvc = [[WebViewController alloc]init]; [agStories setWebViewController:wvc]; agStories.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:agStories animated:YES]; } - (IBAction)gotoKFBNews { KFBNewsViewController *kfbNews = [[KFBNewsViewController alloc]initWithStyle:UITableViewStylePlain]; WebViewController *wvc = [[WebViewController alloc]init]; [kfbNews setWebViewController:wvc]; kfbNews.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:kfbNews animated:YES]; } - (IBAction)gotoMemberBenefits { MemberBenefits *memberBenefits = [[MemberBenefits alloc] initWithNibName:nil bundle:nil]; memberBenefits.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:memberBenefits animated:YES]; } -(IBAction)gotoPhotos:(id)sender { KFBFlickrViewController *photosView = [[KFBFlickrViewController alloc] initWithNibName:@"KFBFlickrViewController" bundle:nil]; [self.navigationController pushViewController:photosView animated:YES]; } - (IBAction)gotoSocialNetworks { SocialNetworks *socialNetworks = [[SocialNetworks alloc] initWithNibName:nil bundle:nil]; socialNetworks.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:socialNetworks animated:YES]; } - (IBAction)gotoFarmMarkets { RSFM *rsfm = [[RSFM alloc] initWithNibName:nil bundle:nil]; rsfm.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController:rsfm animated:YES]; } - (IBAction)settingsButtonPressed:(id)sender { [UAPush openApnsSettings:self animated:YES]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.title = @"Home"; UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"\u2699" style:UIBarButtonItemStyleBordered target:self action:@selector(settingsButtonPressed:)]; [settingsButton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:24], UITextAttributeFont,nil] forState:UIControlStateNormal]; self.navigationItem.leftBarButtonItem = settingsButton; UIBarButtonItem *systemAction = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showMenu)]; self.navigationItem.rightBarButtonItem = systemAction; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } @end 

这对我来说真的很好:

为你的UIScrollView声明一个属性,并将你的ViewController设置为一个UIScrollViewDelegate

 @interface ViewController : UIViewController<UIScrollViewDelegate> @property (strong, nonatomic) UIScrollView *theScrollView; @end 

**请注意,我正在使用代码设置我的UIScrollView ,但可以使用XIB轻松完成。

在ViewController的viewDidLoad:

  self.theScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, 300)]; self.theScrollView.delegate = self; self.theScrollView.pagingEnabled = YES; self.theScrollView.showsHorizontalScrollIndicator = NO; self.theScrollView.showsVerticalScrollIndicator = NO; [self.view addSubview:self.theScrollView]; NSArray *viewArray = [NSArray arrayWithObjects://your UIViews]; for(int i=0; i<viewArray.count; i++) { CGRect frame; frame.origin.x = self.theScrollView.frame.size.width * i; frame.origin.y = 0; frame.size = self.theScrollView.frame.size; UIView *subview = [[UIView alloc] initWithFrame:frame]; [subview addSubview:[viewArray objectAtIndex:i]]; [self.theScrollView addSubview:subview]; } self.theScrollView.contentSize = CGSizeMake(self.theScrollView.frame.size.width * viewArray.count, self.theScrollView.frame.size.height); 

大多数分页scrollViews也有一个UIPageControl与它关联。 为此,重写这个UIScrollViewDelegate方法:

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

我可能会尝试使用UIPageViewController ,而不是一个普通的分页滚动视图。

Apple的PhotoScroller示例代码提供了一个非常好的如何使用UIPageViewController

我在github上也有一些修改PhotoScroller的代码来加载UIViewController子类中的UIPageViewController 。 (在Apple的示例代码中, UIPageViewController是根视图控制器。)

我从来没有用UIPageViewController与每个页面中的不同的UIViewController子类(PhotoScroller示例代码在所有页面中使用PhotoViewController ),但我不明白为什么它不能做的代码的一些修改。

这个链接对你有帮助。 这里使用页面控制器和滚动视图 –

iPhone中的PageControl示例