2012-11-28 89 views
3

有沒有辦法改變segue要調用哪個控制器來準備segue?我試圖做到這一點,當一個嵌入式segue改變分段控制。謝謝!segue change destinationViewController

+0

你是不是想改變哪個控制器嵌入在容器視圖,或者是你試圖從一個嵌入式視圖控制器做不同的segues? – rdelmar

+0

是的我試圖改變基於段選擇嵌入的控制器。感謝您的迴應。 –

回答

4

如果您想切換哪個控制器是嵌入式控制器,那麼我認爲您需要使用Apple使用的自定義容器視圖控制器範例。我下面的代碼來自一個小測試應用程序。這是使用單個控制器模板設置的,然後將容器視圖添加到該控制器(稱爲ViewController),並對主視圖進行分段控制。然後我添加了一個斷開的視圖控制器,將其大小更改爲空閒形式,然後將其視圖大小調整爲與嵌入式控制器的視圖大小相同。這裏是ViewController.h代碼:

@interface ViewController : UIViewController 

@property (weak,nonatomic) IBOutlet UIView *container; 
@property (strong,nonatomic) UIViewController *initialVC; 
@property (strong,nonatomic) UIViewController *substituteVC; 
@property (strong,nonatomic) UIViewController *currentVC; 

@end 

這是我在ViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.initialVC = self.childViewControllers.lastObject; 
    self.substituteVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Substitute"]; 
    self.currentVC = self.initialVC; 
} 

-(IBAction)SwitchControllers:(UISegmentedControl *)sender { 
    switch (sender.selectedSegmentIndex) { 
     case 0: 
      if (self.currentVC == self.substituteVC) { 
       [self addChildViewController:self.initialVC]; 
       self.initialVC.view.frame = self.container.bounds; 
       [self moveToNewController:self.initialVC]; 
      } 
      break; 
     case 1: 
      if (self.currentVC == self.initialVC) { 
       [self addChildViewController:self.substituteVC]; 
       self.substituteVC.view.frame = self.container.bounds; 
       [self moveToNewController:self.substituteVC]; 
      } 
      break; 
     default: 
      break; 
    } 
} 


-(void)moveToNewController:(UIViewController *) newController { 
    [self.currentVC willMoveToParentViewController:nil]; 
    [self transitionFromViewController:self.currentVC toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{} 
          completion:^(BOOL finished) { 
           [self.currentVC removeFromParentViewController]; 
           [newController didMoveToParentViewController:self]; 
           self.currentVC = newController; 
          }]; 
} 
7

正如你可能已經注意到,segue的destinationViewControllerreadonly。你更好的策略是在擁有分段控件的視圖控制器(而不是視圖或控件)和你想要選擇的其他視圖控制器之間定義segues。根據選定的部分做出決定,並從控制器的代碼中調用performSegueWithIdentifier:sender:,並使用與段匹配的標識符。

+0

感謝您的回覆。我仍然可以通過這種方式嵌入子視圖控制器嗎?我想嵌入一個,並在段更改時更改爲另一個。 –

相關問題