zoukankan      html  css  js  c++  java
  • IOS segue(跳转页面处理)

    ● Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue) 

    Segue的属性 

    ● 每一个Segue对象,都有3个属性
    ➢ 唯一标识
    @property (nonatomic, readonly) NSString *identifier;
    ➢ 来源控制器
    @property (nonatomic, readonly) id sourceViewController;
    ➢ 目标控制器
    @property (nonatomic, readonly) id destinationViewController; 

    ● 根据Segue的执行(跳转)时刻,Segue可以分为2大类型

    ➢ 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转

    ➢ 手动型:需要通过写代码手动执行Segue,才能完成界面跳转 

     

    1. 调用sourceViewController的下面方法,做一些跳转前的准备工作并且传入创建好的 Segue对象

     - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:
     (id)sender;
    

    // 这个sender是当初performSegueWithIdentifier:sender:中传入的sender

    2. 调用Segue对象的- (void)perform;方法开始执行界面跳转操作
    ➢ 取得sourceViewController所在的UINavigationController
    ➢ 调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转 

     

     无论是手动类型的segue还是自动类型的segue, 在跳转之前都会执行prepareForSegue方法

    ● 在恰当的时刻,使用perform方法执行对应的Segue

    // Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用 
    [self performSegueWithIdentifier:@"login2contacts" sender:nil];

    - (IBAction)loginOnClick:(UIButton *)sender
    {
        // 添加蒙版禁止用户操作, 并且提示用户正在登录
        [MBProgressHUD showMessage:@"正在拼命加载ing...."];
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            if (![self.accountField.text isEqualToString:@"lnj"]) {
                // 3.登录成功后移除蒙版
                [MBProgressHUD hideHUD];
                 [MBProgressHUD showError:@"用户名不正确!!!"];
                return;
            }
            
            if (![self.pwdField.text isEqualToString:@"123"]) {
                // 3.登录成功后移除蒙版
                [MBProgressHUD hideHUD];
                [MBProgressHUD showError:@"密码不正确!!!"];
                 return;
            }
            
            // 3.登录成功后移除蒙版
            [MBProgressHUD hideHUD];
            // 2.如果正如,跳转到联系人界面(手动执行segue)
            [self performSegueWithIdentifier:@"login2contatc" sender:@"jonathan"];
            
         });
    }
    
    // 在segue跳转之前调用, 会传入performSegueWithIdentifier方法创建好的segue对象
    - (void):(UIStoryboardSegue *)segue sender:(id)sender
    {
        NSLog(@"%@", sender);
        NSLog(@"%@,  %@ %@",segue.identifier, segue.sourceViewController, segue.destinationViewController);
        
        // 1.拿到目标控制器
        UIViewController *vc =  segue.destinationViewController;
        // 2.设置目标控制器的标题
        vc.title = [NSString stringWithFormat:@"%@ 的联系人列表", self.accountField.text];
        
        /*
        // 执行segue的perform内部实现
        UIViewController *sourceVc = segue.sourceViewController;
        UINavigationController *nav = sourceVc.navigationController;
        [nav pushViewController:segue.destinationViewController animated:YES];
         */
        
    }
    // 无论是手动类型的segue还是自动类型的segue, 在跳转之前都会执行该方法
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        /*
        // 取出目标控制器
        NJEditViewController *editVc = (NJEditViewController *)segue.destinationViewController;
        // 设置来源控制器给目标控制器的属性
        editVc.vc = self;
         */
        
        // 1.取出目标控制器
        NJAddViewController *editVc = (NJAddViewController *)segue.destinationViewController;
        // 2.设置代理
        editVc.delegate = self;
    }
  • 相关阅读:
    用css3弹性盒子模型实现九宫格布局
    css布局之左中右结构总结
    内联块inline-block的垂直间隙问题
    Jquery选择器 讲解
    U大师装系统
    陈伟:软件趋势——云物移大智
    asp网站发布步骤总结
    MYfirst
    ASP.net 利用From实现上传文件
    【ASP.NET Core CentOS 发布】(四)在CentOS上安装.NET Core运行时、部署到CentOS
  • 原文地址:https://www.cnblogs.com/liuwj/p/6528346.html
Copyright © 2011-2022 走看看