iOS_18_开关控制器_NavigationController_push道路_数据传输
最后效果图:
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道路_数据传输的更多相关文章
- (5/18)重学Standford_iOS7开发_视图控制器生命周期_课程笔记
第五课: 1.UITextView @property (nonatomic, readonly) NSTextStorage *textStorage;//注意为只读属性,因此不能直接更改内容,NS ...
- iOS_16_开关控制器_modal_代码方法
最后效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill ...
- JMeter_控制器执行效果_给自己挖过的坑
线程及循环设置: 数据文件中放在“循环控制器”中的执行效果:每条数据执行5次,取够50条数据时停止 简单逻辑控制器按下面的目录创建后,执行结果效果同上面循环控制器的执行效果 本来想规整下目录结构,结果 ...
- BZOJ_1626_[Usaco2007_Dec]_Building_Roads_修建道路_(Kruskal)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1626 给出\(n\)个点的坐标,其中一些点已经连通,现在要把所有点连通,求修路的最小长度. 分 ...
- 洛谷P2296 寻找道路_简单BFS
Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...
- 9.8 Binder系统_c++实现_内部机制1
1. 内部机制_回顾binder框架关键点 binder进程通讯过程情景举例: test_server通过addservice向service_manager注册服务 test_client通过get ...
- jmeter(九)逻辑控制器
jmeter中逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序. jmeter提供了17种逻辑控制器,它们各个功能都不尽相同,大概可 ...
- jmeter 逻辑控制器
简单的控制器 简单的逻辑控制器可以让你组织你的采样器和其他 逻辑控制器. 不像其他逻辑控制器,该控制器不提供除此之外的功能 存储设备. 控制面板简单的控制器的截图 参数 在这个例子中,我们创建了一个 ...
- jmeter工具应用1
1.Jmeter介绍 Apache JMeter 是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. 操 ...
随机推荐
- 在html中写python代码的语法和特点-----基于webpy的httpserver
在html文件里写python语法的内容,的注意事项: 1:python程序中的变量通过以下方法传入到html: 1:通过全局变量 :全局变量是不须要用$def with语法实现传递的,仅仅要定义了 ...
- WPF案例 (六) 动态切换UI布局
原文:WPF案例 (六) 动态切换UI布局 这个Wpf示例对同一个界面支持以ListView或者CardView的布局方式呈现界面,使用控件ItemsControl绑定数据源,使用DataTempla ...
- spring配置日志
原文:http://blog.csdn.net/xiejx618/article/details/41698913 参考:http://spring.io/blog/2009/12/04/loggin ...
- poj2777--Count Color(线段树,二进制转化)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34950 Accepted: 10542 Des ...
- delphi 发送消息控制滚动条
1.Perform 函数 DBGrid1.Perform(WM_VSCROLL,SB_PAGEDOWN,0); //控制滚动条,向后翻页 DBGrid1.Perform(WM_VSCROLL,SB_ ...
- ORA-16525: the Data Guard broker is not yet available
DGMGRL> disable configuration;ORA-16525: the Data Guard broker is not yet available Configuration ...
- Python重写C语言程序100例--Part6
''' [程序41] 题目:学习static定义静态变量的使用方法 1.程序分析: 2.程序源码: ''' # python没有这个功能了,仅仅能这样了:) def varfunc(): var = ...
- Java解惑七:很多其它类之谜
谜题66 继承的问题. 对于实例方法:命名同样时,子类会覆写父类的方法,且訪问权限至少和父类一样大. 对于域:命名同样时,子类会隐藏父类的域,且訪问权限随意. 谜题67 不要重用库中的类名. 谜题68 ...
- 收藏的Android很好用的组件或者框架。
收藏的Android很好用的组件或者框架. android框架 先说两个站点: http://www.androidviews.net/ 非常好的国外开源码站,就是訪问速度有点慢啊 http://w ...
- Justinmind教程(3)——管理原型
如已经描述Justinmind概述和Justinmind简单的计算器功能 Justinmind使用教程(1)--概述部分 Justinmind使用教程(2)--计算表达式及条件用法 本章将回到最原始的 ...