如何在iOS Swift中为多个ViewControllers添加公共视图?

时间:2016-07-02 06:01:21

标签: ios swift uiview uiviewcontroller

我对iOS开发有点新意 我希望在其中包含自定义视图和一些标签。在我的应用程序的一些viewControllers上点击按钮我想添加/显示该视图 在viewController的底部。

我想在视图中显示的所有viewControllers中手动添加storyboard中的视图。但这并不高效。如何在按钮单击时以编程方式在viewControllers中添加此视图?

3 个答案:

答案 0 :(得分:6)

使用UIViewController继承一个BaseViewController类

现在在BaseViewController中创建名为 designFooter 的方法

func designFooter() {
var viewFooter: UIView = UIView(frame: CGRectMake(0, self.view.bounds.size.height - 50, self.view.bounds.size.width, 50))
viewFooter.backgroundColor = UIColor.redColor()
self.view!.addSubview(viewFooter)
}   

现在继承这个BaseViewController给你想要添加页脚的ViewController,点击按钮只需调用 self.designFooter()

答案 1 :(得分:3)

如果要添加的子视图具有一些动态内容或具有许多自己的逻辑,则可能需要使用视图控制器包含,特别是不仅添加子视图,还添加与该子视图关联的控制器。因此,您可以在故事板中为此子视图创建一个场景,该场景将显示在底部,并将其与自己的视图控制器关联。然后,当你想要添加它时,你会做类似的事情:

let child = storyboard!.instantiateViewController(withIdentifier: "storyboardid")
addChild(child)
// set the `frame` or `constraints` such that it is in the correct place, perhaps animating it into place
view.addSubview(child.view)
child.didMove(toParent: self)

当你想删除它时:

child.willMove(toParent: nil)
child.view.removeFromSuperview()
removeChild(child)

就个人而言,如果这可以在我的应用程序中的任何场景中真正出现和消失,我实际上将整个应用程序嵌入到容器视图控制器中。然后,只需在此主容器视图控制器上执行一次子弹出和弹出。

例如,请考虑这个故事板:

enter image description here

这是一个嵌入式“容器视图”(相当于视图控制器包含的故事板,如上所述)。然后我可以在out中设置一个标签动画(通过使用标签更改某些视图的高度约束后动画layoutIfNeeded)。然后,无论当前哪个视图控制器的视图可见,此底部视图都可以进行动画处理:

enter image description here

答案 2 :(得分:0)

只需创建一个UIView并调用addSubview:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];//change this frame for your purposes
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(10,10,50,10)];
[l setText: @"My label"];
[view addSubview: l];
[self.view addSubview: view];

至于将它添加到多个视图控制器......我想如果你有很多不同的视图控制器和这个相同的UIView,你可以创建一个名为CustomViewController的UIViewController的子类。在该类中,将以上代码添加到viewDidLoad。然后,在具有此特定视图的所有视图控制器中继承CustomViewController,它们将自动为您添加它。

编辑: 如果要在界面构建器中设计视图,请创建UIView的自定义子类。让我们调用这个CustomView。在笔尖中设计它并添加您想要的任何代码。然后,只要您想创建该视图,只需致电CustomView *cv = [[CustomView alloc] initWithFrame:...],然后执行[self.view addSubview:cv];