Ios UIKit控制器/视图是否在视图之间切换?

Ios UIKit控制器/视图是否在视图之间切换?,ios,uikit,Ios,Uikit,抱歉,如果是新手问题 我的控制器/视图使用UISegmentedControl。我需要在控制器/视图之间切换,让视图占据屏幕的其余部分。这个想法与UITabBarController非常相似,但切换控件不是选项卡按钮,而是段控件。根据iOS设计和实践,如何实现它?您可以在基础视图上添加UISegmentedControl并在基础视图控制器中处理单击事件。 在段控制单击事件上,只需在基本视图上添加和删除相应的视图控制器。创建一个容器视图控制器并包括tis逻辑: @property (nonatom

抱歉,如果是新手问题


我的控制器/视图使用
UISegmentedControl
。我需要在控制器/视图之间切换,让视图占据屏幕的其余部分。这个想法与UITabBarController非常相似,但切换控件不是选项卡按钮,而是段控件。根据iOS设计和实践,如何实现它?

您可以在基础视图上添加UISegmentedControl并在基础视图控制器中处理单击事件。
在段控制单击事件上,只需在基本视图上添加和删除相应的视图控制器。

创建一个容器视图控制器并包括tis逻辑:

@property (nonatomic, strong) UISegmentedControl *segmentedControl;
@property (nonatomic, strong) NSMutableArray *viewControllers;
@property (nonatomic, weak) UIView *containerView;
@property (nonatomic) NSInteger currentSelectedIndex;



_segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];
[_segmentedControl addTarget:self action:@selector(changeViewController:) forControlEvents:UIControlEventValueChanged];


- (void)changeViewController:(UISegmentedControl *)segmentedControl
{
    UIViewController *oldViewController = self.viewControllers[self.currentSelectedIndex];
    UIViewController *newViewController = self.viewControllers[segmentedControl.selectedSegmentIndex];

    [self willTransitionToViewController:newViewController];
    [self transitionFromViewController:oldViewController
                      toViewController:newViewController
                              duration:0
                               options:UIViewAnimationOptionTransitionNone
                            animations:nil
                            completion:^(BOOL finished) {
                                if (finished)
                                    [self didTransitionToViewController:newViewController];
                            }];
}


- (void)showFirstViewController
{
    UIViewController *firstViewController = [self.viewControllers firstObject];

    // set required the frame
    firstViewController.view.frame = self.containerView.bounds;
    firstViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

    [self.containerView addSubview:firstViewController.view];

    [self willTransitionToViewController:firstViewController];
    [self didTransitionToViewController:firstViewController];
}



- (void)willTransitionToViewController:(UIViewController *)viewController
{
    if (self.currentSelectedIndex != UISegmentedControlNoSegment)
    {

        UIViewController *oldViewController = self.viewControllers[self.currentSelectedIndex];
        [oldViewController willMoveToParentViewController:nil];
    }

    viewController.containerView.frame = self.ContainerView.bounds;
    viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
}

- (void)didTransitionToViewController:(UIViewController *)viewController
{
    [viewController didMoveToParentViewController:self];

    self.segmentedControl.selectedSegmentIndex = [self.viewControllers indexOfObject:viewController];
    self.currentSelectedIndex = [self.viewControllers indexOfObject:viewController];

}

您可以做的是,在这个
MainViewC
中设置一个带段的主视图控制器,并设置两个不同的视图控制器,分别为
ViewAVC
ViewBVC

添加要在ViewA和ViewB中显示的所有子视图

将这些视图控制器添加到
MainViewC
,并为每个视图控制器设置适当的框架

现在,当您添加segmentControl时,您可以通过以下方式添加目标函数

itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil];
seg = [[UISegmentedControl alloc] initWithItems:itemArray];
[seg setFrame:segRect];
seg.segmentedControlStyle = UISegmentedControlStyleBar;
seg.momentary = NO;
[seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged];
[mainView addSubview:seg];
在此函数中
someAction:
检查段的当前选定值,隐藏一个视图,取消隐藏另一个视图


这样,您将拥有独立的视图控制器,但当您希望在这些视图控制器和
MainViewC
之间进行交互时,您需要添加一些代理

您能提供一个示例吗?我需要为每个“部分”设置单独的控制器/视图,请通过以下链接进行描述,然后我需要手动为每个控制器创建视图,并在控制器中设置所有不好的部分代码,因为它变得太大,并且具有您可以始终使用的部分控制器的逻辑。xib用于每个视图,当然,但是所有的逻辑都在控制器中,我不想让一个控制器中所有部分的逻辑更新答案。将此设置为当前选定控制器并将其视图显示给整个屏幕?是。您需要将段控件添加到视图中,还需要在段控件下方添加一个容器视图,并将viewControllers视图添加到容器视图中。否,我需要使视图仅占段控件下方屏幕的一部分,而不只是设置新的控制器/视图。请阅读最后一条评论,我解释了如何使视图只占分段控件下面屏幕的一部分。我还编辑了代码以及它是如何初始化的?