iOS学习笔记

界面跳转系列一:push和modal

2017-04-02  本文已影响0人  Corbin___

一、介绍(基础操作忽略)

push:是针对在Navigation(导航栏)下使用的
modal:模态窗口(只能对这个窗口操作,点击其他窗口没有响应的), 是可以在任何控制器使用的,主要有两种:
1.窗口弹出(弹出后,后面的视图不可用的,比如A弹出B,A不可用)
2.控制器的跳转

二、使用

1、push必须在Navigation下使用、

Paste_Image.png

解释:按ctrl进行连线,分别连出push和modal

Paste_Image.png

问题:点击push,报错
原因:因为push必须在Navigation下使用,我这个没有在这个环境下

2、如果没有在Navigation下使用modal是可以跳转的,而且还不需要任何代码

那么在使用modal怎么做出Navigation的效果呢?

Paste_Image.png Paste_Image.png Paste_Image.png
效果:这样就可以返回到主视图了
注意:dismissViewControllerAnimated这个方法并不算返回上一层,正确的说是将现有视图隐藏,自然就会显示出上一层的视图出来,从而达到返回上一层的效果

3、实现不连线跳转

Paste_Image.png Paste_Image.png

然后再主视图的.m文件写上这个代码,注意,刚才modal的连线要去掉

Paste_Image.png
- (IBAction)modalClicked:(UIButton *)sender {
    
    UIStoryboard *storyboard = self.storyboard;
    
    FirstViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"jump"];
    
    
    [self presentViewController:vc animated:YES completion:nil];
}

方便copy,附上代码

4、presentViewController 跳转 后视图是黑色

testViewController *vc = [[testViewController alloc] init];
 [self presentViewController:vc animated:YES completion:nil];

解析:如果用以上的方法跳转,那么跳转后的视图是黑色的
原因:我觉得操作跳转是成功了,确实跳转到了指定的控制器,但是我们的控制器视图的显示是故事版绘制的,所以我们只是跳转了控制器,但是并没有找到指定的故事版把视图绘制出来
解决

UIStoryboard *storyboard = self.storyboard;

 FirstViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"jump"];

 [self presentViewController:vc animated:YES completion:nil];

这样才可以成功

5、代码操作

1.Navigation下操作:

//跳转到指定id的控制器(这里的id是指在故事板里设置控制器的id)
    [self.navigationController pushViewController:vc animated:YES];
//返回到上一层视图
    [self.navigationController popViewControllerAnimated:YES];
// 返回到根视图
    [self.navigationController popToRootViewControllerAnimated:YES];

这里,同样有个问题,操作不当,就会出现跳转后黑色的情况

// 创建控制器对象要用这种方法创建
UIStoryboard *storyboard = self.storyboard;

 FirstViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"jump"];

// 如果用这种,就会出现跳转后黑色
FirstViewController *vc = [[FirstViewController alloc] init];

上一篇下一篇

猜你喜欢

热点阅读