自定义viewcontroller怎么用storyboard加导航
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义viewcontroller怎么用storyboard加导航相关的知识,希望对你有一定的参考价值。
参考技术A iosSDK6/Xcode4.5开始在Storyboad中新增很多功能对可视化的开发页面布局,导航更加方便,下面就写一下各种导航的实现。
1、不用像Xcode4之前必须删除默认的viewcontroller,然后拖一个navigation
controller,然后才能实现导航。只需要选择默认的viewcontroller
,在菜单上选择editor-embed
in-
2、下面实现导航最简单的就是next,back,只需要按住ctr直接拖线就好了,这里有一个Storyboard
Segue-Identifier这个值最好填上,可以在代码里面用到
这个Identifier的值可以一般在两个地方会用
1页面切换是方便传值,代码如何
2如果一个页面有个导航路径,需要通过代码判断导航到哪个目的viewcontroller也就是执行哪个Identifier,代码如下
3、自定义导航,默认提供了,push,modal,popover,replace,还有就是custom,可以自定义class实现。
下面自定义了一个Back功能的导航,代码如下
4、返回任意一个viewcontroller,官方称
unwind
segues,如果你想让一个viewcontroller可以在其他任意的viewcontroller直接导航回来那么只需要在这个viewcontroller下重写以下方法
只要你在每个viewcontroller中重写了-(ibaction)name:(uistoryboardsegue
*)segue,那么当你直接拖线指向Exit图标的时候就会出现你所有实现的方法,当你选择哪个方法就返回到实现这个方法的viewcontroller
使自定义viewcontroller覆盖导航栏
我正在我的主viewcontroller上显示一个自定义弹出窗口。为此,我在故事板中创建了一个viewcontroller(显示的图像),相应的类如下所示。
class PopUpViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
self.showAnimate()
}
func showAnimate()
{
self.view.alpha = 1.0
}
func removeAnimate()
{
UIView.animate(withDuration: 0.0, animations: {
self.view.alpha = 0.0;
}, completion:{(finished : Bool) in
if (finished) {
self.view.removeFromSuperview()
}
});
}
}
然后在我的主视图控制器中,我按下按钮点击弹出如下:
let popOverVC = UIStoryboard(name: "MainViewController", bundle: nil).instantiateViewController(withIdentifier: "popup") as! PopUpViewController
self.addChildViewController(popOverVC)
popOverVC.view.frame = self.view.bounds
self.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: self)
当添加弹出窗口时,这会使主视图控制器的背景变为黑色,不透明度为70%。如何使导航栏也具有相同的背景效果?
我试过更新:
self.view.window?.backgroundColor = UIColor.black.withAlphaComponent(0.7)
和
self.navigationController?.navigationBar.backgroundColor = UIColor.black.withAlphaComponent(0.7)
在viewDidLoad()但没有工作。任何可能的解决方
答案
如果我理解正确,你将把popOverVC
作为子视图添加到mainViewController
中嵌入的UINavitationController
视图中。如果是这种情况,那么popOverVC
不会覆盖navigationBar是合乎逻辑的,因为navigationBar是navigationController
的子视图,而不是你的mainViewController
的子视图。为了能够覆盖navigationBar,你必须将popOverVC
添加到navigationController
:
// to make things a bit easier working with the optional self.navigationController
guard let navController = self.navigationController else { return }
let popOverVC = UIStoryboard(name: "MainViewController", bundle: nil).instantiateViewController(withIdentifier: "popup") as! PopUpViewController
navController.addChildViewController(popOverVC)
popOverVC.view.frame = navController.view.bounds
navController.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: navController)
以上是关于自定义viewcontroller怎么用storyboard加导航的主要内容,如果未能解决你的问题,请参考以下文章
xcode - 将 xib 文件附加到自定义 UIView 类时出错
使用 Xcode 和 Swift 创建的 iOS 应用程序中状态栏的自定义背景颜色
ViewController 不符合自定义 UIButton 类