2014-06-26 100 views
1

对不起,如果是新手的问题。UIKit控制器/视图在视图之间切换?

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

回答

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

} 
+0

will this将新选定的控制器设置为当前并将其视图显示在整个屏幕上? – 4ntoine

+0

是的。您需要添加段控件以查看并在段控件下添加一个容器视图,并将viewControllers视图添加到容器视图。 –

+0

不,我需要使视图仅占用分段控件下方的部分屏幕,而不是仅设置新的控制器/视图。 – 4ntoine

0

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

+0

你能提供一个例子吗?我需要为每个“部分”单独控制器/视图 – 4ntoine

+0

请通过以下链接描述相同http://stackoverflow.com/questions/9110567/switching-viewcontrollers-with-uisegmentedcontrol-in-ios5 –

0

你能做什么,有一个主要的ViewController与段,说MainViewC和采取两种不同的视图控制器说ViewAVCViewBVC这里面MainViewC

添加您想要在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你将需要添加一些代表

+0

然后我需要为每个控制器手动创建视图,并在我的控制器中有所有的代码段,这是不好的恕我直言,因为它变得太大,并具有部分控制器的逻辑 – 4ntoine

+0

您可以随时使用.xib的每个视图,也为你的观点分开分类。 –

+0

当然,但所有的逻辑是在控制器,我不想有一个控制器中的所有部分的逻辑 – 4ntoine

相关问题