IOS UINavigationController实现控制器之间跳转以及信息交互

实现控制器跳转的几种方式

1.可以通过UINavigationController来实现,它是一种类似“栈”的数据结构,控制器通过入栈和出栈实现跳转。
2.也可以通过UITabBarController来实现,它类似微信主界面下方的几个按钮,它可以实现几个界面之间的切换,把控制器实例化并添加即可。
3.或者直接在当前控制器下调用下一个控制器,实现跳转。

这次我们重点研究UINavigationController的使用。

UINavigationController的学习和使用

几个步骤:

  • 实例化UINavigationController
  • 把它作为当前window的根视图控制器。
  • 实例化一个控制器作为UINavigationController的根控制器,也就是栈底控制器。
  • 除此之外还需要用window的初始化操作。
    创建它的代码:
    这里的操作都是在delegate的回调中完成的,下一步就会进入第一个控制器的界面了。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    ViewController *viewController=[[ViewController alloc]init];
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.window.rootViewController = nav;
    self.window.backgroundColor = [UIColor clearColor];
    [self.window makeKeyAndVisible];
    return YES;
}

跳转到下一个控制器:

[self.navigationController pushViewController:viewController2 animated:YES];

弹出当前控制器,回到上一个控制器

[self.navigationController popViewControllerAnimated:YES];

在这个过程中会发生什么呢?
压栈后控制器初始化,显示控制器内容。弹栈后控制器销毁。

- (void)dealloc
{
   
    NSLog(@"---------DEALLOC2--------");
}

这里实现了dealloc回调方法,可以看到在返回的时候,打印了 ---------DEALLOC2--------
整理控制器跳转的逻辑
因为第一个控制器在成为UINavigationController的根控制器后完成加载,然后在其中有一个按钮,点击按钮,触发监听方法,调用:

- (IBAction)Action:(id)sender
{
   
    NSLog(@"添加控制器2");
    ViewController2 *viewController2 = [[ViewController2 alloc] init];    
    [self.navigationController pushViewController:viewController2 animated:YES];
}

进入了控制器2,然后在控制器2中点击按钮,回到控制器1。

- (IBAction)ActionBack:(id)sender
{
   
    NSLog(@"弹出当前控制器2");
    self.block(self.textView.text);
    [self.navigationController popViewControllerAnimated:YES];
}

其中的self.navigationController管理了整个控制器的pop和push逻辑。

UIView的生命周期

这个过程中view做了些什么事情呢?
在我的demo中实现了实现了view的回调方法,写了相应输出语句,先展示这些代码,我们结合现象分析view的生命周期。
直接给出了view生命周期的全部方法了。

#import "View2.h"
@interface View2()
{
   
    NSInteger count;
}
@end
@implementation View2
- (id)initWithFrame:(CGRect)frame
{
   
    self = [super initWithFrame:frame];
    if(self){
   
        self.backgroundColor = [UIColor yellowColor];
        NSLog(@"<-- 1 %s , count = %@-->
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值