Controllers whose view is other MVCs
- UITabBarController
- UISplitViewController
- UINavigationController
获得其中的ViewController
这些Controller都可以通过
var viewControllers:[UIViewControllers]{get, set}
来获取里面的ViewControllers
其中
- UITabBarController看有几个TabItem
- SplitViewController有2个
- NavigationController看Stack中有几个
获得ViewController所在的母控制器
里面的ViewController可以通过
var tabBarController:UITabBarController?{get}
var splitViewController:UISplitViewController?{get}
var navigationController:UINavigationController?{get}
来获得这些ViewController
Segues
4种segue
- show segue(will push in Navigation Controller, else modal)
- show detail segue(will show in detail of split view or push in Navi)
- modal segue(take over the entire screen)
- popover segue(appear in a little popover window)
ways to segue
- performSegueWithIdentifier(identifier:String, sender:Anyobject?)
- prepareForSegue(segue:UIStoryboardSegue, sender:Anyobject?)
- shouldPerformSegueWithIdentifier(identifier:String)
其中segue中比较重要的是:
- segue.identifier
- segue.destinationViewController
注意:此时destinationViewController的outlet还没有初始化
popover
- popover is not a UIViewController
- it is UIPopoverPresentationController
- uses segue too
- All segue are managed via a UIPresentationController
prepareForSegue(segue, sender){
if let identifier = segue.identifier {
switch identifier {
case "popover":
if let vc = segue.destinationViewController as? myController {
if let ppc = vc.popoverPresentationController {
ppc.permittedArrowDirection = UIPopoverArrowDirection.Any
ppc.delegate = self
}
}
}
}
}
popover在iPhone上的适应方法
当popover在iPhone中出现时,默认会使用Modal的弹出方式,但也可以改变,使用如下方法
func adaptivePresentationStyleForPresentationController(UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None //显示和iPad一样,default is .FullScreen
}
或者通过下列方式来modal显示一个定制化的VC
fun presentationController(UIPresentationController,viewControllerForAdaptivePresentationStyle:UIModalPresentationStyle) -> UIViewController {
}
Important: Popover Size
the MVC inside popoverViewController has
var preferredContentSize: CGSize
虽然这样不能够保证,但是iOS会尽量
override var preferredContentSize:CGSize {
get {
if textView != nil && presentingViewController!= nil {
return textView.sizeThatFits(presentingViewController!.view.bounds.size)
}
else {
return super.preferredContentSize
}
}
set {
super.perferredContentSize = newValue
}
}
Others
如果重写了父类的property observer,则会先执行父类的,再执行子类的,而不会完全覆盖