文档章节

navigationController

海二少
 海二少
发布于 2017/04/11 11:06
字数 1667
阅读 6
收藏 0

最终效果图:

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左侧的按钮@property (weak, nonatomic) IBOutlet UIBarButtonItem *refreshBtn;// NavigationItem右侧的按钮@property (weak, nonatomic) IBOutlet UIBarButtonItem *wantToLoginBtn;// NavigationItem左侧的按钮 点击事件 刷新至初始状态- (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// 用户名输入框@property (weak, nonatomic) IBOutlet UITextField *username;// 密码输入框@property (weak, nonatomic) IBOutlet UITextField *password;// 输入用户名和密码之后,点击 登录按钮- (IBAction)loginBtnClick:(UIButton *)sender;// NavigationItem左侧的按钮 点击事件  返回前一个控制器- (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;  }// 输入用户名和密码之后,点击 登录按钮- (IBAction)loginBtnClick:(UIButton *)sender
{  // robust判断  if (_username.text.length == 0 || _password.text.length == 0) {    UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"请输入帐号和密码" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"明白" otherButtonTitles:@"other", nil];    [sheet showInView:self.view];    [_username becomeFirstResponder];    return;  }    // 输入正确的密码和账号之后,跳转至第3个控制器//	self.navigationController pushViewController:<#(UIViewController *)#> animated:<#(BOOL)#>    
     // 通过segue连线,跳至self.navigationController容器里面的下一个 子控制器,并且传递参数(用户名),参数会被传递到self的 prepareForSegue方法中,然后才会传递到 下一下控制器(destination)  [self performSegueWithIdentifier:@"segue_loginSuccess" sender:_username.text];  }// NavigationItem左侧的按钮 点击事件  返回前一个控制器,即首页- (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右侧的按钮   欢迎 标语@property (weak, nonatomic) IBOutlet UIBarButtonItem *item_nanaSay;// 点击NavigationItem左侧的按钮  回到首页,即第一个控制器,并且将数据带过去- (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;  <pre name="code" class="objc">===============================对比版	<span style="font-family: Arial, Helvetica, sans-serif;">*/</span>

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

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 = @"首页";  // 设置右边的按钮和点击事件  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 = @"料理";    // 设置返回按钮的显示 文本  self.navigationItem.backBarButtonItem.title = @"上一张";    //设置顶部 右边的按钮,并添加监听事件  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


© 著作权归作者所有

海二少
粉丝 0
博文 87
码字总数 48854
作品 0
程序员
私信 提问

暂无文章

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
4
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
6
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
4
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
999
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部