• iOS_18_开关控制器_NavigationController_push道路_数据传输


    最后效果图:



    storyboard示意图:



    BeyondViewController.h

    //
    //  BeyondViewController.h
    //  18_控制器切换_navigation_push_通过storyboard方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface BeyondViewController : UIViewController
    
    // NavigationItem左側的button
    @property (weak, nonatomic) IBOutlet UIBarButtonItem *refreshBtn;
    // NavigationItem右側的button
    @property (weak, nonatomic) IBOutlet UIBarButtonItem *wantToLoginBtn;
    
    // NavigationItem左側的button 点击事件 刷新至初始状态
    - (IBAction)refresh:(UIBarButtonItem *)sender;
    
    @end
    


    BeyondViewController.m


    //
    //  BeyondViewController.m
    //  18_控制器切换_navigation_push_通过storyboard方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import "BeyondViewController.h"
    
    @interface BeyondViewController ()
    
    @end
    
    @implementation BeyondViewController
    
    
    // 刷新至初始状态
    - (IBAction)refresh:(UIBarButtonItem *)sender
    {
        self.navigationItem.title = @"首页";
        self.wantToLoginBtn.enabled = YES;
        self.refreshBtn.enabled = NO;
    }
    @end
    

    LoginViewController.h

    //
    //  LoginViewController.h
    //  18_控制器切换_navigation_push_通过storyboard方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface LoginViewController : UIViewController
    
    // username输入框
    @property (weak, nonatomic) IBOutlet UITextField *username;
    // password输入框
    @property (weak, nonatomic) IBOutlet UITextField *password;
    
    // 输入username和password之后,点击 登录button
    - (IBAction)loginBtnClick:(UIButton *)sender;
    
    // NavigationItem左側的button 点击事件  返回前一个控制器
    - (IBAction)backToHome:(UIBarButtonItem *)sender;
    
    @end
    


    LoginViewController.m

    //
    //  LoginViewController.m
    //  18_控制器切换_navigation_push_通过storyboard方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import "LoginViewController.h"
    #import "NanaViewController.h"
    @interface LoginViewController ()
    
    @end
    
    @implementation LoginViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        _password.secureTextEntry = YES;
    }
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    
    
    
    #pragma mark - Navigation
    
    // 在通过segue跳转至下一个导航子控制器前,做准备工作!这儿是传递数据给目的控制器
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)username
    {
        // 要得到目的控制器,请使用 [segue destinationViewController].
        // 在这里,能够传递数据给下一个控制器
        
        // 这个參数是要传递的数据
        NSLog(@"prepare for segue----%@",username);
        
        // 通过segue的destinationViewController得到即将要跳转的目的控制器,传递数据给它
        NanaViewController *nanaVC = [segue destinationViewController];
        NSString *oldTitle = nanaVC.item_nanaSay.title;
        nanaVC.username = username;
        NSString *newStr = [NSString stringWithFormat:@"%@你好呀~%@      ",username,oldTitle];
        nanaVC.item_nanaSay.title = newStr;
        
    }
    
    
    
    // 输入用户名和password之后,点击 登录button
    - (IBAction)loginBtnClick:(UIButton *)sender
    {
        // robust推断
        if (_username.text.length == 0 || _password.text.length == 0) {
            UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"请输入帐号和password" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"明确" otherButtonTitles:@"other", nil];
            [sheet showInView:self.view];
            [_username becomeFirstResponder];
            return;
        }
        
        // 输入正确的password和账号之后,跳转至第3个控制器
    //    self.navigationController pushViewController:<#(UIViewController *)#> animated:<#(BOOL)#>
        
        
       
        // 通过segue连线,跳至self.navigationController容器里面的下一个 子控制器,而且传递參数(用户名),參数会被传递到self的 prepareForSegue方法中,然后才会传递到 下一下控制器(destination)
        [self performSegueWithIdentifier:@"segue_loginSuccess" sender:_username.text];
        
    }
    
    
    // NavigationItem左側的button 点击事件  返回前一个控制器,即首页
    - (IBAction)backToHome:(UIBarButtonItem *)sender
    {
        [self.navigationController popViewControllerAnimated:YES];
        
    }
    @end
    

    NanaViewController.h

    //
    //  NanaViewController.h
    //  18_控制器切换_navigation_push_通过storyboard方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface NanaViewController : UIViewController
    // NavigationItem右側的button   欢迎 标语
    @property (weak, nonatomic) IBOutlet UIBarButtonItem *item_nanaSay;
    
    // 点击NavigationItem左側的button  回到首页,即第一个控制器,而且将数据带过去
    - (IBAction)backToHome:(UIBarButtonItem *)sender;
    
    // 仅用来接收传递过来的数据用~
    @property (nonatomic,copy) NSString * username;
    @end
    



    NanaViewController.m


    //
    //  NanaViewController.m
    //  18_控制器切换_navigation_push_通过storyboard方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import "NanaViewController.h"
    #import "BeyondViewController.h"
    @interface NanaViewController ()
    
    @end
    
    @implementation NanaViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    
    
    
    // 回到首页,即第一个控制器,而且将数据带过去
    - (IBAction)backToHome:(UIBarButtonItem *)sender {
        // 拿到第一个控制器
    
        BeyondViewController *firstVC = [self.navigationController.viewControllers firstObject];
        
        // [self.navigationController.viewControllers objectAtIndex:n-2];  //n為最頂的index
        
        
        //增加要传递的数据
        NSString *str = [NSString stringWithFormat:@"欢迎%@回来",_username];
        firstVC.navigationItem.title = str;
        firstVC.wantToLoginBtn.enabled = NO;
        firstVC.refreshBtn.enabled = YES;
        // pop至第一个控制器
        [self.navigationController popToViewController:firstVC animated:YES];
    }
    @end
    

    ========================

    **************



    我是切割线



    **************

    =================================


    push的实现,使用代码方式:



    BeyondAppDelegate.h

    //
    //  BeyondAppDelegate.h
    //  18_控制器切换_navigationCtrl_push_代码方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    @class BeyondViewController;
    @interface BeyondAppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    
    // 为应用程序的代理 加入一个成员属性  控制器
    @property (nonatomic,strong) BeyondViewController *viewController;
    
    @end
    



    BeyondAppDelegate.m

    //
    //  BeyondAppDelegate.m
    //  18_控制器切换_navigationCtrl_push_代码方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import "BeyondAppDelegate.h"
    #import "BeyondViewController.h"
    @implementation BeyondAppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
       
        ===============================对照 原版
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        
        // 为应用代理 的成员属性 实例化一个BeyondViewController控制器
        self.viewController = [[BeyondViewController alloc] initWithNibName:@"BeyondViewController" bundle:nil];
        
        // 将BeyondViewController控制器,设置成为窗体的rootViewController
        self.window.rootViewController = self.viewController;
        
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
        
    ===============================对照 原版 
    
    
    
    
    
    
       
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // 为应用代理 的成员属性 实例化一个BeyondViewController控制器 
    self.viewController = [[BeyondViewController alloc] initWithNibName:@"BeyondViewController" bundle:nil]; 
    // 创建导航控制器,并设置 栈底的控制器为 BeyondViewController 
    UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:self.viewController]; 
    // 最后将导航 控制器,设置成为窗体的rootViewController 
    self.window.rootViewController = navi; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; return YES;
    
    }
    @end
    <pre>

    BeyondViewController.m

    //
    //  BeyondViewController.m
    //  18_控制器切换_navigationCtrl_push_代码方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    /*
     导航控制器方法总结:
     1,创建导航控制器,在App代理的方法里面
     
         // 创建导航控制器,并设置 栈底的控制器为 BeyondViewController
         UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:self.viewController];
     
     2,栈 的形式管理
                self.navigationController.viewControllers
     
     3,压栈 即跳至下一个控制器
     
         [self.navigationController pushViewController:loginVC animated:YES];
     
     4,出栈 即返回,将控制器从stack里面弹出 
         [self.navigationController popToRootViewControllerAnimated:YES];
     
         [self.navigationController popViewControllerAnimated:YES];
     
         [self.navigationController popToViewController:<#(UIViewController *)#> animated:<#(BOOL)#>];
     
     5,导航栏显示标题,左Item,右item,返回item
        当中 返回的文本是由上一个控制器决定 的 ???
        self.title 就是 self.navigationItem.title
     
     6,取得栈顶控制器
            self.navigationController.topViewController
     
     */
    
    
    #import "BeyondViewController.h"
    #import "LoginViewController.h"
    @interface BeyondViewController ()
    
    @end
    
    @implementation BeyondViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // 设置顶部标题
        self.navigationItem.title = @"首页";
        // 设置右边的button和点击事件
    
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"下一张" style:UIBarButtonItemStyleBordered target:self action:@selector(nextBtnClick)];
        
        
    }
    
    // 点击 下一张,进入 下一个控制器
    
    - (void)nextBtnClick
    {
        
        // 实例化,下一个控制器,并push加入到父容器中,并动画跳转
        LoginViewController *loginVC = [[LoginViewController alloc]init];
        
        
        //  这样子也能够拿到容器控制器,即导航控制器[self.parentViewController];
        [self.navigationController pushViewController:loginVC animated:YES];
    
    
    }
    
    
    @end
    

    BeyondViewController.xib



    第2个控制器.m

    //
    //  LoginViewController.m
    //  18_控制器切换_navigationCtrl_push_代码方式
    //
    //  Created by beyond on 14-7-31.
    //  Copyright (c) 2014年 com.beyond. All rights reserved.
    //
    
    #import "LoginViewController.h"
    #import "NanaViewController.h"
    @interface LoginViewController ()
    
    @end
    
    @implementation LoginViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // 设置顶部标题
        self.navigationItem.title = @"料理";
        
        // 设置返回button的显示 文本
        self.navigationItem.backBarButtonItem.title = @"上一张";
    
        
        //设置顶部 右边的button,并加入监听事件
        UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"下一张" style:UIBarButtonItemStyleBordered target:self action:@selector(rightBtnClick)];
        self.navigationItem.rightBarButtonItem = item;
    }
    
    // 响应 顶部 右边的 点击
    - (void)rightBtnClick
    {
        
        // 实例化,第3个控制器,并push至栈顶
        // 实例化,下一个控制器,并push加入到父容器中,并动画跳转
        NanaViewController *nanaVC = [[NanaViewController alloc]init];
        
        
        //  这样子也能够拿到容器控制器,即导航控制器[self.parentViewController];
        [self.navigationController pushViewController:nanaVC animated:YES];
    }
    
    
    @end
    





    
        
            

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    java初学
    数据库命名及设计规范(转)
    转-ASP.NET页面之间传递值
    程序员个人职业规划
    如何学习别人的代码(转)
    可映射的CSV读取引擎
    iTween扩展
    Unity3d中NGUI加强版血条(Healthbar)的制作
    Unity3D中寻路Navmesh的简单介绍
    多人网络(Valve开发文档翻译[起源引擎])(一)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4619660.html
Copyright © 2020-2023  润新知