使用Storyboard在同一容器视图中创建多个视图

3
我有一个带背景图和标题头的视图控制器。这个视图大部分时间都保持不变。我有不同的子视图,我将在这个视图控制器中显示和隐藏它们。
如何使用故事板实现呢?
  1. 我是否需要为每个子视图创建单独的xib文件?
  2. 或者我可以在同一个视图控制器内创建单独的视图,并根据需要隐藏和显示它们?
还是有更加优雅的解决方案吗?
谢谢。

请查看此教程:https://dev59.com/LmQn5IYBdhLWcg3wXGOr - Amit Thakur
5个回答

8

2
如果您使用容器视图,设计UI会更加容易。
在所有子视图中添加“容器视图”。 在主“View Controller”中为所有子“容器视图”创建属性。 在容器“视图控制器”中设计子视图。 在主“视图控制器”中应用业务逻辑,根据需要显示或隐藏子视图。

1
通常情况下,您不需要为每个子视图创建单独的xib文件(从技术上讲,我们可以在同一个故事板上绘制所有视图控制器)。
针对隐藏和显示问题,将子视图设为IBOutlet,然后让您的代码决定哪个视图应该显示,哪个应该隐藏。

1

在添加和移除子视图时,使用addSubview:removeFromSuperview比隐藏和显示更好。

在同一ViewController中,您可以使用addSubView:添加视图,使用removeFromSuperView来移除视图。


0

添加和删除子视图是实现此目的的最佳方法。但如果您使用故事板进行此操作,则所有重叠的视图可能会看起来凌乱,并且难以管理。

实现此目的的最佳方法是通过编程方式添加视图,并通过编程方式设置布局约束。

UIView *subView = [[UIView alloc]init];
subView.backgroundColor = [UIColor blackColor];
NSDictionary *viewsDictionary = @{@"subView":subView};

NSDictionary *metrics = @{@"offset":@20};

NSArray *heightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-offset-[subView]-offset-|"
                                                                    options:0
                                                                    metrics:metrics
                                                                      views:viewsDictionary];

NSArray *widthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-offset-[subView]-offset-|"
                                                                   options:0
                                                                   metrics:metrics
                                                                     views:viewsDictionary];
[self.view addConstraints:heightConstraint];
[self.view addConstraints:widthConstraint];

上面的代码示例将向视图控制器的主视图添加子视图,其顶部、底部、前导和尾随空间设置为20。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接