Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        5年前关闭。
                                                                                            
                
        
我知道这个问题以前已经问过了,我知道如何实际更改视图或使用分段控件的视图控制器,但是我有一个更具体的问题。我设计了UI,设计师使用了对我来说很像UISegmentedControl的东西作为视图更改器。但是,它在导航栏下方,因此我无法将分段控件嵌入导航栏中,而让导航控制器处理在堆栈上和堆栈外推入和弹出视图,因为我需要分段控件不进行动画处理,就好像它是导航栏的一部分。我已经尝试了几种方法,例如将导航控制器与包含分段控件的子类导航栏一起使用,但是您无法编辑导航控制器的导航栏的框架。如果任何人都可以帮助设置自定义动画,使分段控件无法创建动画,那也很好。我使用下面的导航栏将图片链接到分段控件,以获取上下文。
https://dl.dropboxusercontent.com/s/qjiedv4thpaosru/Screen%20Shot%202014-11-16%20at%201.30.45%20PM.png?dl=0

谢谢!

更新:

如果这个问题没有搁置,我会将其发布为答案并选择它,但是这是我如何解决自己的问题:

我创建了一个带有navBar + segmented控件的UIViewController(如上所示),并在其下有一个容器视图。

我拿了两个VC(测验和学习)并将它们放在导航控制器中。通过分段控件上的IBAction,我使用操纵导航堆栈来访问正确的视图控制器。

最佳答案

假设您有一个ViewController mainVC嵌入在UINavigationController中,并且mainVC具有分段控件。当选择了第一个段时,您要显示firstVC viewController,并显示第二个段的secondVC。

我发现,如果将mainVC设为UIPageViewController的子类,则确实很难阻止分段控件在屏幕上设置动画。因此,我将创建一个UIPageViewController并将其作为mainVC视图的子视图嵌入(它可以具有相同的框架)。分段控件同样是mainVC视图的子视图(例如,可以按自己的意愿进行布局-例如,在导航栏的下方)。我在mainVC的viewDidLoad中的代码中做了所有这些工作:

// 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];


在segmentTapped:方法中,您可以触发pageViewController从firstVC切换到secondVC,反之亦然:

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


如果实现UIPageViewController的委托和数据源方法,甚至可以使用滑动手势来切换页面。

关于ios - 使用分段 Controller 更改 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26960588/

10-13 02:38