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

时间:2014-06-26 06:31:44

标签: ios uikit

对不起新手问题,如果是。

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

创建容器viewController并包含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];

}

答案 2 :(得分:0)

你可以做什么,让一个主视图控制器与段,说MainViewC并采取两个不同的视图控制器在ViewAVC

中说ViewBVCMainViewC

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

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

现在添加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之间进行交互时,您需要添加一些代理