控制器跳转小常识

关于控制器跳转需要注意的问题:

 

一般三种方式进行跳转: push,modal,custom

一般跳转相应实现方法和注意点:

1.[self.navigationController pushViewController:jump animated:YES];

 

2.[self presentModalViewController:jump animated:YES];

注意:如果还想要modal回上一个界面还需要另外设置个按钮专门监听点击

 [self dismissModalViewControllerAnimated:YES];

 

3.在storyboard中点击ctrl从自身controller连接到另外一个controller设置跳转方式,一般我设置push,然后为segue绑定标示符,作用:跳转的时可以知道要跳转的相应controller

如果用的连线设置segue跳转方式和绑定segue标示符的话,则不需要创建控制器来跳转了。

直接用:[self performSegueWithIdentifier:@"jump" sender:self];就可跳转到storyboard描述的界面

 

关于所要跳转得到的界面的Controller创建注意点:

1.代码创建:- (void) loadView;

JumpViewController *jump = [[JumpViewController alloc] init];得到的就是代码描述的

[self.navigationController pushViewController:jump animated:YES];跳转到对应代码描述的界面

 

2.没有使用- (void) loadView;使用xib描述(注意xib名字创建的时候必须和JumpViewController同名

)这样可以省去指定名字加载xib(File’s Owner的class记得设置为JumpViewController,并且对View进行连线

JumpViewController *jump = [[JumpViewController alloc] init];得到的就是xib描述的

[self.navigationController pushViewController:jump animated:YES];跳转到对应xib描述的界面

 

3.使用的storyboard描述搭建的界面(class那里记得设置为自定义JumpViewController,Storyboard ID记得要设置

重点:Storyboard如果不主动加载它是不会自己加载的,所以必须要手动加载它,这个时候就不要使用[[JumpViewController alloc] init]创建了。

JumpViewController *jump = [self.storyboard instantiateViewControllerWithIdentifier:@"jump"];加载标示符所对应的storyboard得到storyboard描述的界面

 

    [self.navigationController pushViewController:jump animated:YES];跳转到storyboard描述的界面

 

如果你用Storyboard搭建界面,但是却用JumpViewController *jump = [[JumpViewController alloc] init];方式创建controller,如果代码或者xib实现了view,则跳转到对应代码或xib创建的界面,如果代码和xib没有实现,你又没有主动去加载Storyboard,则会系统帮你创建一个view,而且是黑色的无任何数据,这就是为什么不注意导致的黑屏不显示任何数据问题。因为数据和空间都在Storyboard里面,而系统帮你自动创建的压根不是Storyboard对应的view,就是这样造成的黑屏和无数据显示。

 

 

注意:如果使用了xib描述的view,突然想换代码编写,发现还出现xib描述的界面,记得clear一下,保险一点就是卸载软件,在clear。

原文地址:https://www.cnblogs.com/pocket-mood/p/4456052.html