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






    
        

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

posted @ 2015-07-03 20:35  blfshiye  阅读(237)  评论(0编辑  收藏  举报