使用容器视图

Posted

技术标签:

【中文标题】使用容器视图【英文标题】:Working with a container view 【发布时间】:2012-10-15 09:04:09 【问题描述】:

这是我的情况。我有一个视图控制器。在顶部三个按钮和按钮下方是一个容器视图。当您按下按钮时,容器视图应该会发生变化。

这就是我在故事板中所做的。

    将视图控制器拖到我的情节提要中。在其中添加了 3 个按钮和一个容器视图。 此视图控制器已关闭类 viewController 将第二个视图控制器拖入其中。并控制从 containerView 拖到这个视图控制器。并选择嵌入 segue。

现在在代码中我为控制器 viewController 执行以下操作

-(IBAction)chooseFirstController:(id)sender 
    [self.childViewControllers.lastObject switchToFirst];



-(IBAction)chooseSecondController:(id)sender 
    [self.childViewControllers.lastObject switchToSecond];

-(IBAction)chooseThirdController:(id)sender 
    [self.childViewControllers.lastObject switchToThird];

对于我的 containerController.h,我执行以下操作。

@interface ContainerViewController : ViewController

@property (nonatomic,strong) FirstController *cont1;
@property (nonatomic,strong) SecondController *cont2;
@property (nonatomic,strong) ThirdController *cont3;
@property (nonatomic,strong) ContainerViewController *currentController;

在我的 container.m 中

- (void)viewDidLoad

    [super viewDidLoad];
    self.cont1 = [[FirstController alloc]initWithNibName:@"FirstController" bundle:nil];
    self.cont2 = [[SecondController alloc]initWithNibName:@"SecondController" bundle:nil];
    self.cont3 = [[ThirdController alloc]initWithNibName:@"ThirdViewController" bundle:nil];
    [self addChildViewController:self.cont1];
    self.currentController = self.cont1;
    [self.view addSubview:self.cont1.view];


-(void)switchToFirst 
    if (self.currentController != self.cont1) 
        [self addChildViewController:self.cont1];
        [self moveToNewController:self.cont1];
    


-(void)switchToSecond 
    if (self.currentController != self.cont2) 
        [self addChildViewController:self.cont2];
        [self moveToNewController:self.cont2];
    

-(void)switchToThird 
    if (self.currentController != self.cont3) 
        [self addChildViewController:self.cont3];
        [self moveToNewController:self.cont3];
    


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

但我在 IBActions 中不断收到错误“No known instance method for selector switchtoFirst”。

谁能帮帮我?

提前致谢。

【问题讨论】:

【参考方案1】:

我猜lastObject 正在返回一个UIViewController 并且不知道它是一个ContainerViewController - 因此不知道switchtoFirst 方法。

尝试类似:

-(IBAction)chooseFirstController:(id)sender 
    UIViewController *vc = self.childViewControllers.lastObject;
    if([vc isKindOfClass:[ContainerViewController class]]) 
        ContainerViewController *containerVC = (ContainerViewController *)vc;
        [containerVC switchtoFirst];
    

【讨论】:

以上是关于使用容器视图的主要内容,如果未能解决你的问题,请参考以下文章

Subview没有使用容器的完整视图

使用段控件更新容器视图

使用 segue 向后导航时如何重新加载容器视图?

(自动布局)容器视图调整大小但子视图不

UIViewController 容器视图内容扩展容器边界

使用容器视图控制器访问导航栏