为UISegmentedControl按钮创建单独的视图

时间:2013-02-13 19:22:39

标签: ios objective-c view uisegmentedcontrol

我很难为每个Segmented Buttons创建视图。 Segmented control按钮位于Tab Bar Controller的其中一个视图中。我在StoryBoard中创建它。我已经问了同样的问题(Creating Separate Views For segmented Control Buttons)..等待解决方案..

这是我的故事板的截图。 enter image description here

此外,我尝试了Editor->EmbedIn->NavController,但它会单独显示带有后退按钮的navBar。我也需要在同一个显示器中显示这3个视图(以及那些NavBar和段按钮)。

对于每个视图我都有一些功能,如显示图像列表,Maps ..所以我还需要在UI中进行设计。有没有根据ParentView大小创建新视图控制器的可能性(如contentPlaceHolder)。因为我需要在ui设计..谢谢你提前..

1 个答案:

答案 0 :(得分:1)

下面的代码显示了如何在容器视图中切换控制器。在IB中,我开始使用选项卡式模板,在FirstViewController的顶部添加了导航栏和工具栏,并将分段控件添加到工具栏。然后,我在视图中添加了一个容器视图(在对象列表中的常规视图旁边),并将其调整大小以占用选项卡栏和工具栏之间的所有空间。我为容器视图和导航栏的标题项做了出口,并将方法,changeControllers:连接到分段控件。添加容器视图时,会自动获得与嵌入segue相关联的相同大小的视图控制器。我添加了两个视图控制器,将其大小更改为“自由格式”,并将其大小调整为与嵌入式控制器(320x411)相同。此大小更改仅用于IB中的布局目的,当您将它们添加到容器时,仍需要在代码中调整视图大小,如下所示。此代码位于FirstViewController中,控制器具有容器视图:

@interface FirstViewController ()
@property (weak,nonatomic) IBOutlet UIView *containerView;
@property (strong,nonatomic) UIViewController *embeddedVC;
@property (strong,nonatomic) UIViewController *secondVC;
@property (strong,nonatomic) UIViewController *thirdVC;
@property (strong,nonatomic) UIViewController *currentController;
@property (weak,nonatomic) IBOutlet UINavigationItem *titleItem;
@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.embeddedVC = self.childViewControllers.lastObject;
    self.currentController = self.embeddedVC;
    self.titleItem.title = self.currentController.title;
}


-(IBAction)ChangeControllers:(UISegmentedControl *)sender {

        switch (sender.selectedSegmentIndex) {
            case 0:{
                if (![self.currentController isEqual:self.embeddedVC]) {
                    self.embeddedVC.view.frame = self.containerView.bounds;
                    [self addChildViewController:self.embeddedVC];
                    [self moveToNewController:self.embeddedVC];
                }
                break;
            }
            case 1:{
                if (! self.secondVC) {
                    self.secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Second"];
                }
                if (![self.currentController isEqual:self.secondVC]) {
                    self.secondVC.view.frame = self.containerView.bounds;
                    [self addChildViewController:self.secondVC];
                    [self moveToNewController:self.secondVC];
                }
                break;
            }
            case 2:{
                if (! self.thirdVC) {
                    self.thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Third"];
                }
                if (![self.currentController isEqual:self.thirdVC]) {
                    self.thirdVC.view.frame = self.containerView.bounds;
                    [self addChildViewController:self.thirdVC];
                    [self moveToNewController:self.thirdVC];
                }
                break;
            }
            default:
                break;
        }
}


-(void)moveToNewController:(id) newController {
    [self.currentController willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
                            completion:^(BOOL finished) {
                                [self.currentController removeFromParentViewController];
                                [newController didMoveToParentViewController:self];
                                self.currentController = newController;
                                self.titleItem.title = self.currentController.title;
                            }];
}