Using Segmented Controller to Change Views [closed]

孤者浪人 提交于 2019-12-02 12:46:37

Assume you have a ViewController, mainVC, embedded in a UINavigationController, and mainVC has the segmented control. When the first segment is selected you want firstVC viewController presented, and secondVC for the second segment.

I found that if you make mainVC a subclass of UIPageViewController, it does prove difficult to stop the segmented control from animating on/off screen. So instead, I would create a UIPageViewController, and embed it as a subView of the mainVC's view (it can have the same frame). The segmented control is likewise a subview of mainVC's view (so you can lay it out however you like - just below the navigation bar, for example). I did all of this in code in the viewDidLoad of mainVC:

// Set up a page controller to manage the pages....
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
// self.pageController.dataSource = self;
// self.pageController.delegate = self;
self.pageController.view.frame = CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height);
[self.pageController setViewControllers:@[firstVC] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageController];
[self.view addSubview:self.pageController.view];
// And lay a segmented control over the top....
CGRect segmentFrame = CGRectMake(0,0,self.view.frame.size.width,50); // or whatever
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[@"First",@"Second"]];
[self.segmentedControl addTarget:self action:@selector(segmentTapped:) forControlEvents:UIControlEventValueChanged];
self.segmentedControl.frame = segmentFrame;
[self.view addSubview:self.segmentedControl];

In your segmentTapped: method, you can trigger the pageViewController to swap from firstVC to secondVC or vice versa:

[self.pageController setViewControllers:@[secondVC] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

If you implement the UIPageViewController's delegate and datasource methods, you can even have swipe gestures to switch pages.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!