0

在我的 iPad 应用程序中,我有一个设置屏幕(一个 UIViewController 子类)。所需的行为就像 iPad 系统设置一样,左侧有一个 UITableView,它根据用户点击的单元格在右侧加载其他 UIViewController。

如果不将 UINavigationController 用于右窗格,我看不到如何执行此操作。在右边有一个堆栈是没有意义的。我无法使用拆分视图,因为设置屏幕不是我的根控制器。

我希望能够使用使用故事板布局的视图控制器。我在苹果的文档中看到,我可以在运行时创建设置详细视图控制器的实例并将它们作为子视图附加,但随后我失去了 IB 提供的所有花哨的布局工具。我的设计团队需要能够打开它并进行调整。

我还尝试了自定义 segue(继承 UIStoryboardSegue),但这似乎也有推送行为。

这是我目前拥有的图片。如果没有导航控制器或堆栈行为,我怎么能做到这一点? 在此处输入图像描述

4

1 回答 1

0

您可以使用 UIViewController 类参考中记录的自定义容器控制器 api 来执行此操作。这是一个如何做到这一点的例子。此代码位于带有容器视图的控制器中。在 IB 中,我通过在模拟指标中将其大小设置为“自由形式”来制作替代控制器,然后更改视图的大小以匹配容器视图中嵌入的控制器(容器是容器视图的 IBOutlet)。

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


-(IBAction)switchControllers:(UISegmentedControl *)sender {

    if (sender.selectedSegmentIndex == 0) {
        if (self.currentVC == self.substituteVC) {
            [self addChildViewController:self.initialVC];
            [self moveToNewController:self.initialVC];
        }
    }else{
        if (self.currentVC == self.initialVC) {
            [self addChildViewController:self.substituteVC];
            [self moveToNewController:self.substituteVC];
        }
    }
}


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


-(void)constrainViewEqual:(UIView *) view {
    [view setTranslatesAutoresizingMaskIntoConstraints:NO];
    NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeCenterX relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
    NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeCenterY relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
    NSLayoutConstraint *con3 = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeWidth relatedBy:0 toItem:view attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
    NSLayoutConstraint *con4 = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeHeight relatedBy:0 toItem:view attribute:NSLayoutAttributeHeight multiplier:1 constant:0];
    NSArray *constraints = @[con1,con2,con3,con4];
    [self.container addConstraints:constraints];
}
于 2013-05-06T20:26:11.567 回答