控制器的跳转-modal与push

一、modal与push
modal从下面往上盖住原来的控制器,一般上一个控制器和下一个控制器没有什么关联时用modal,比如联系人的加号跳转页面,任何控制器都可以用modal

push一般是上下文有关联时用,(比如设置界面的通用跳转页面)导航控制器才能用push

A控制器modal出B控制器,那么A控制器就会强引用B,如果不强引用,无法处理B的业务逻辑(比如点击按钮回答A),会报野指针错误

复制代码
// modal另一个界面
- (IBAction)modal:(id)sender {
    
    
    // 创建modal的控制器
    OneViewController *oneVc = [[OneViewController alloc] init];
    
    
    // 把新创建的控制器的View添加到窗口上
    UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
    [keyWindow addSubview:oneVc.view];
    
    
    // 从下往上钻的动画
    // 首先让oneVc的view显示在窗口的底部
    oneVc.view.transform = CGAffineTransformMakeTranslation(0, keyWindow.bounds.size.height);
    
    // 动画,往上移动,还原形变
//    [UIView animateWithDuration:0.5 animations:^{
//        // 还原形变
//        // CGAffineTransformIdentity清空所有的形变,所有的形变参数都是0
//        oneVc.view.transform = CGAffineTransformIdentity;
//    } completion:^(BOOL finished) {
//        self.presentedVC = oneVc;
//    }];
    
    
    // A控制器modalB控制器,B控制器会被A控制器强引用
    // modal一个控制器
    [self presentViewController:oneVc animated:YES completion:^{
        
    }];
    
}

// modal:会把新控制器的view添加窗口上,但是不会修改窗口的根控制器
// modal:会把新控制器强引用,谁modal,谁就强引用,为什么要强引用,如果不强引用,新创建的控制器就会被销毁,就不能处理modal出来界面的业务逻辑.
复制代码

关闭modal出来的控制器

复制代码
- (IBAction)dismiss:(id)sender {
    
    
    // modal出谁,谁就可以dismiss
    [self dismissViewControllerAnimated:YES completion:nil];
    
}
复制代码
posted @ 2015-09-17 15:15  王刚韧(wanghy_iOS)  阅读(696)  评论(0编辑  收藏  举报