斯坦福Developing iOS 8 Apps学习笔记(三)

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

  1. performSegueWithIdentifier(identifier:String, sender:Anyobject?)
  2. prepareForSegue(segue:UIStoryboardSegue, sender:Anyobject?)
  3. 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,则会先执行父类的,再执行子类的,而不会完全覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值