自学Swift-斯坦福笔记整理(七)

Multiple MVCs

UITabBarController
//只有一个属性tabBar中
var tabBarItem: UITabBarItem!
tabBarIten中有title,icon等

UISplitViewController 包含两个MVC
左边的MVC叫做split view的Master
右边的MVC叫做Detail
 
UINavigationController
可以包含任何一个MVC类似设置界面
title bar显示标题还可以放置一些图标
工作就为一个堆栈,点击一个mvc就进入一个新的MVC,然后返回就把栈中的MVC移除返回上一层操作
有一个特殊属性 outlet 指向某个MVC是指向某个MVC的控制器
所有Controller中都有一个属性叫viewControllers它是由UIViewController组成的一个数组
var viewControllers: [UIViewcontrolle] {get set}//用于存储controllers

获取到一个viewControllers
var tabBarController: UITabBarController? {get}
var splitViewController: UISplitViewController? {get}
var navigationController: UINavigationController? {get}
for example get the detail of the split view controller
if let detailVC: UIViewController = splitViewController?.viewController[1]{…}

Segues是如何从一个View Controller转换到另一个View Controller
四中基本Segues
Show Segues展示正在交互的那个MVC基本是在Navigtion Conroller中使用到
Show detail segues 与上一个很相似,唯一的区别是在Detail中显示MVC
Popover Segue弹出Segue的目标View Controller,并让这个View Controller显示在所有其他东西之上.并不是整个屏幕只是一小块区域,如果用户点击了区域外则这个View就会消失,尽管他不是铺满整个屏幕,但是你可以让窗口背后的用户额面变灰变暗
model
都会创建一个新的MVC

MVC实现了一个方法,叫做prepareForeSegue在里面,它存着刚刚创建出来的MVC

func prepareForSegue(segue:UIStroyboardSegue,sender: AnyObject?) {
     if let identifier = segue.identifier {
          switch identifier {
               case “Show Graph”: 
                    if let vc = segue.detinationViewController as? MyController {
                    vc.property1 = ..
                    vc.callMethodToSetItUp(…)
               }
               default:break
          }
     }
}
第一个segue UIStoryboardSegue的实例,这个实例里有两个相当重要的东西.一个是identifier这能让你知道 在准备那一个segue
第二个是这个segue发生时新建的那个MVC名字叫destinationViewController

因为split view controller不能在普通IPHONE上运行.所以需要添加Navigation Controller

当准备segue的时候.outlet还没有设置,会抛异常
因为在运行到使用outlet的时候MVC还没对他进行设置赋值,所以当时的outlet还是为nil的值.一个为nil的值进行调用方法就是一个错误.必须注意.以后这类事情最好先设置为?的或者检查是否为nil在进行做后面的事

Popover
Popover不是一个UIViewController它是通过一个叫做PresentationControlleri出现在屏幕上的
一个解决方法就是在outlet调用处为?可选值意思为如果这个为nil就不执行后面的方法等
PresentationController的delegate非常有趣可以调整popver以在iPhone上适配
iPad会有小窗口等效果
iPhone称为了modal 全屏模式
func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObejct) {
     if let identifier = segue.dentifier {
          switch identifier {
              case “Do Something in a Popover Segue”:
               if let vc = segue.destnationViewController as? MyController{
                   if let ppc = vc.popoverPresentationController{
                        ppc.permittedArrowDirections = UIPopoverArrowDirection.Any
                         ppc.delegate = self
                    }
               }
               default:break
          }
     }
}
对于dalegate可以实现协议中
delegate的协议要实现UIPopoverPresentationControllerDelegate
//当popover将要弹出来的时候.
//这个方法说明不让iPhone适配POpover不然会占满一个屏幕
func adaptivePresentationStyleForPresentationController(UIPresentationController) -> UIModalPresentationStyle {
     return UIModalPresentationStyle.None //(不要 default is .FullScreen)
}

func presentationController(UIPresentationController,viewControllerForAdaptivePresentationStyle: UIModalPresentationStyle) -> UIViewController? {
     // return a UIViewController to use(e.g. wrap a Navigation Controller around your MVC)
}

Popover size
var preferredContentSize: CGSize
子类中可以重写父类的这个属性

UserDefaults
NSUserDefaults.standarUserDefaults();
会返回一个userdefaults 靠他读取或写入 NSUserDefaults

UIViewController中有个属性为
presentingViewController是通过ViewController通过某种segue正在屏幕中显示的ViewController 也可以拿来检测viewcontrooler中有没有文字等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值