您的位置:首页 > 移动开发 > IOS开发

IOS-笔记9(多MVC,View间转换)

2015-08-19 20:15 316 查看
多MVC设计模式

IOS中提供了几个Controller,它们使用其他MVC作为视图:

UITabBarController,UISplitViewController,UINavigationController,在这几个Controller里

UINavigationController就像咱们iPhone里的设置菜单那样,是一个栈来实现的,你每点击一个选项,一个新的MVC就会来到栈顶,顶部栏的返回按钮是自动放在那里的,点击 以后会使得栈顶的MVC被移除。

创建这些一般通过在StoryBoard中拖拽出这几个Controller然后通过Ctrl加拖拽来创建他们和其他视图的关系

Segues

他负责从一个View转换到另一个View,有四种默认的:Show Segue, Show Detital Segue, Modal Segue, Popover Segue

创建Segues同样是通过将负责跳转操作的按钮或空间使用Ctrl加拖拽的办法拖到需要跳转的View上,一定要记得设置Id,这是唯一表示你的Segues的字符串。

连接好以后就要做跳转View的准备工作了,准备工作要在跳转前的View里做,复写一个方法即可

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        //首先判断是不是要跳转到HappinessViewController的segue
        if let happinessViewController = segue.destinationViewController as? HappinessViewController {
            //然后再判断是哪一个id的segue
            if let identifier = segue.identifier {
                switch identifier {
                    case "sad": happinessViewController.happiness=0
//一开始执行上面被注释掉的语句会崩溃,因为将这个值赋给happiness时调用了faceView的重绘方法(faceView.setNeedsDisplay())。
//而faceView这个OutLet是在HappinessViewController里定义的,在做这段准备时它并没有被定义。
//不过如果你将faceView放在一个Optional链里这个问题就很好解决了,当faceView为nil时,整句话不会报错,只是返回一个nil。(faceView?.setNeedsDisplay())
                    case "meh": happinessViewController.happiness=50
                    case "happy": happinessViewController.happiness=100
                default: break
                }
            }
        }
    }
也可以直接从代码里创建,不过还是需要从StoryBoard里先定义一个segue,这次直接从View顶上的图标中的***小圆点拖,在需要执行的地方写上这句话:

performSegueWithIdentifier("nothing", sender: self)
准备还是在上面的函数里准备,加一个case。

Popover

与其他的segue一样,主要的区别是你需要调节一下大小,默认的话在iPhone上会充满整个屏幕而无法退回

if let ppc = tvc.popoverPresentationController {
    ppc.delegate = self
}
在segue的准备函数中将自己设置为代理,并声明自己实现UIPopoverPresentationControllerDelegate这个协议,并实现下面的方法:

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.None
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: