2014-06-26 139 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

相關問題