有没有办法改变 segue 在准备 segue 时要调用的控制器?当使用嵌入式 segue 更改分段控件时,我正在尝试这样做。谢谢!
问问题
8226 次
2 回答
8
您可能已经注意到 segue 的destinationViewController
is readonly
。您更好的策略是在包含分段控件(不是视图或控件)的视图控制器和您想要选择的其他视图控制器之间定义 segues。根据所选段做出决定,并performSegueWithIdentifier:sender:
使用与段匹配的标识符从控制器代码中调用。
于 2012-11-28T19:07:45.433 回答
5
如果你想切换哪个控制器是嵌入式控制器,那么我认为你需要使用 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;
}];
}
于 2012-11-29T17:13:47.310 回答