我很难为每个Segmented Buttons
创建视图。
Segmented control
按钮位于Tab Bar Controller的其中一个视图中。我在StoryBoard中创建它。我已经问了同样的问题(Creating Separate Views For segmented Control Buttons)..等待解决方案..
这是我的故事板的截图。
此外,我尝试了Editor->EmbedIn->NavController
,但它会单独显示带有后退按钮的navBar。我也需要在同一个显示器中显示这3个视图(以及那些NavBar和段按钮)。
对于每个视图我都有一些功能,如显示图像列表,Maps ..所以我还需要在UI中进行设计。有没有根据ParentView大小创建新视图控制器的可能性(如contentPlaceHolder)。因为我需要在ui设计..谢谢你提前..
答案 0 :(得分:1)
下面的代码显示了如何在容器视图中切换控制器。在IB中,我开始使用选项卡式模板,在FirstViewController的顶部添加了导航栏和工具栏,并将分段控件添加到工具栏。然后,我在视图中添加了一个容器视图(在对象列表中的常规视图旁边),并将其调整大小以占用选项卡栏和工具栏之间的所有空间。我为容器视图和导航栏的标题项做了出口,并将方法,changeControllers:连接到分段控件。添加容器视图时,会自动获得与嵌入segue相关联的相同大小的视图控制器。我添加了两个视图控制器,将其大小更改为“自由格式”,并将其大小调整为与嵌入式控制器(320x411)相同。此大小更改仅用于IB中的布局目的,当您将它们添加到容器时,仍需要在代码中调整视图大小,如下所示。此代码位于FirstViewController中,控制器具有容器视图:
@interface FirstViewController ()
@property (weak,nonatomic) IBOutlet UIView *containerView;
@property (strong,nonatomic) UIViewController *embeddedVC;
@property (strong,nonatomic) UIViewController *secondVC;
@property (strong,nonatomic) UIViewController *thirdVC;
@property (strong,nonatomic) UIViewController *currentController;
@property (weak,nonatomic) IBOutlet UINavigationItem *titleItem;
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.embeddedVC = self.childViewControllers.lastObject;
self.currentController = self.embeddedVC;
self.titleItem.title = self.currentController.title;
}
-(IBAction)ChangeControllers:(UISegmentedControl *)sender {
switch (sender.selectedSegmentIndex) {
case 0:{
if (![self.currentController isEqual:self.embeddedVC]) {
self.embeddedVC.view.frame = self.containerView.bounds;
[self addChildViewController:self.embeddedVC];
[self moveToNewController:self.embeddedVC];
}
break;
}
case 1:{
if (! self.secondVC) {
self.secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Second"];
}
if (![self.currentController isEqual:self.secondVC]) {
self.secondVC.view.frame = self.containerView.bounds;
[self addChildViewController:self.secondVC];
[self moveToNewController:self.secondVC];
}
break;
}
case 2:{
if (! self.thirdVC) {
self.thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Third"];
}
if (![self.currentController isEqual:self.thirdVC]) {
self.thirdVC.view.frame = self.containerView.bounds;
[self addChildViewController:self.thirdVC];
[self moveToNewController:self.thirdVC];
}
break;
}
default:
break;
}
}
-(void)moveToNewController:(id) newController {
[self.currentController willMoveToParentViewController:nil];
[self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
completion:^(BOOL finished) {
[self.currentController removeFromParentViewController];
[newController didMoveToParentViewController:self];
self.currentController = newController;
self.titleItem.title = self.currentController.title;
}];
}