最后效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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的实现,使用代码方式:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

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

iOS_18_开关控制器_NavigationController_push道路_数据传输的更多相关文章

  1. (5/18)重学Standford_iOS7开发_视图控制器生命周期_课程笔记

    第五课: 1.UITextView @property (nonatomic, readonly) NSTextStorage *textStorage;//注意为只读属性,因此不能直接更改内容,NS ...

  2. iOS_16_开关控制器_modal_代码方法

    最后效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill ...

  3. JMeter_控制器执行效果_给自己挖过的坑

    线程及循环设置: 数据文件中放在“循环控制器”中的执行效果:每条数据执行5次,取够50条数据时停止 简单逻辑控制器按下面的目录创建后,执行结果效果同上面循环控制器的执行效果 本来想规整下目录结构,结果 ...

  4. BZOJ_1626_[Usaco2007_Dec]_Building_Roads_修建道路_(Kruskal)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1626 给出\(n\)个点的坐标,其中一些点已经连通,现在要把所有点连通,求修路的最小长度. 分 ...

  5. 洛谷P2296 寻找道路_简单BFS

    Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...

  6. 9.8 Binder系统_c++实现_内部机制1

    1. 内部机制_回顾binder框架关键点 binder进程通讯过程情景举例: test_server通过addservice向service_manager注册服务 test_client通过get ...

  7. jmeter(九)逻辑控制器

    jmeter中逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序. jmeter提供了17种逻辑控制器,它们各个功能都不尽相同,大概可 ...

  8. jmeter 逻辑控制器

    简单的控制器 简单的逻辑控制器可以让你组织你的采样器和其他 逻辑控制器. 不像其他逻辑控制器,该控制器不提供除此之外的功能 存储设备. 控制面板简单的控制器的截图 参数  在这个例子中,我们创建了一个 ...

  9. jmeter工具应用1

      1.Jmeter介绍 Apache JMeter 是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. 操 ...

随机推荐

  1. Spring集成XFire开发WebService

    Spring是眼下最流行的JavaEE Framework,可是使用Spring的Spring-WS开发WebService却十分繁琐.XFire是一个简化WebService开发的开源项目.通过Sp ...

  2. 阿里巴巴2015研究project普通笔试题,与答案

    欢迎您对这篇文章的其他建议.我可以留言在以下平台. 个人博客网站:www.anycodex.com/blog/ Csdn博客网站:http://my.csdn.net/?ref=toolbar 微博: ...

  3. tolua 有些功能可以用(经过测试)

    tolua 提供几个 C++ 与 Lua 进行数据交换的工具函数. ~~ tolua.type 返回一个 C++ 对象的类型描写叙述字符串. local node = display.newNode( ...

  4. HDU 4869 Turn the pokers(推理)

    HDU 4869 Turn the pokers 题目链接 题意:给定n个翻转扑克方式,每次方式相应能够选择当中xi张进行翻转.一共同拥有m张牌.问最后翻转之后的情况数 思路:对于每一些翻转,假设能确 ...

  5. JavaFX的扩展控件库ControlsFX介绍

    声明:   本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...

  6. 三点半们耐热i哦好家哦i囧囧【

    http://pan.baidu.com/share/link?shareid=3011665141&uk=338692646&third=15                http ...

  7. 50个最受网友欢迎的HTML5资源下载列表

    完整附件下载地址:http://down.51cto.com/data/413867 附件预览: HTML 5游戏源码精选(共含9个游戏源码) http://down.51cto.com/zt/227 ...

  8. Ubuntu--有关VMware Tools安装问题

    虚拟机中找不到VMware Tools选项 在虚拟机上安装了ubuntu系统后,是不可以进行系统间数据共享的,也就是说我win7系统里的文件,不能拷贝到虚拟机的ubuntu系统. 解决方案:我们需要安 ...

  9. 抢车位中的排名bug(比較使用了无符号数)

    昨天把这个发在了qzone,想来还是怪怪的,还是转过来不吧,纯当发现了一个虫子,玩笑一下.只是csdn如今不能贴图,挺郁闷的,原文在http://user.qzone.qq.com/110907073 ...

  10. Django中的一些同步Model和数据库的命令

    1 最简单而又令人兴奋的命令: manage.py syncdb 创建了指定app中的model相应的数据库表,假设是第一次使用此命令,会提示是否创建超级用户,输入username,Email和pas ...