码迷,mamicode.com
首页 > 其他好文 > 详细

UINavigationController 导航控制器、页面间通信

时间:2015-10-25 17:55:50      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

UINavigationController 导航控制器、页面间通信 (2014-08-27 10:33:17)

技术分享

转载

标签: 佛学

 

正文开始

栈的方式管理?

就是先进后出的管理方式,通过出栈和入栈来展示各个视图控制器

UINavigationController的ContentView里始终显示栈顶控制器的view

viewControllers属性存储了栈中的所有被管理的控制器

navigationController属性,父类中的属性,每个在栈中的控制器,都能通过此属性,获取自己所在的UINavigationController对象

至少要有一个被管理的视图控制器,需要一个根控制器,任何一个继承自UIViewControl的类(多态)都可以作为跟控制器

多态:同一个事件,不同对象响应这个事件的方法是不同的

 

pushViewController:animated  进入下一个视图控制器,即即将推入的视图控制器

popViewControllerAnimated:   返回上一个视图控制器

popToViewController:animated  返回到指定的视图控制器

popToRootViewControllerAnimated   返回到根视图控制器

 

常用属性

viewControllers 所有处于栈中的控制器

topViewController 位于栈顶的控制器

visibleViewController 当前正在显示的控制器

navigation 导航条

 

定制UINavigationBar

首页属于UIBarButtonItem - UIBarItem-NSObject  而不继承于UIView

 

 

两种传值方式:

属性传值:(A传给B)

把A控制器导航栏输入框的字符串值传递给B页面控制器导航栏

第一步:

在B控制器的.h文件中声明输入框的字符串属性

// 第一步  

// 声明字符串属性

@property (nonatomic, copy) NSString *titleStr;     // 传值属性

第二步:

在A控制器中声明B控制器的h文件

在A控制器的按钮切换方法中让输入框的值赋给B控制器的字符串属性值

// 把当前页面输入框的值给了firstVC.titleStr属性

    _textField.text = firstVC.titleStr;

第三步:

在B控制器中让输入框接收字符串属性中接收过来的A导航控制器的输入框的值

// 把传递过来的值赋到输入框中

    _textField.text = _titleStr;

 

 

代理传值:(B传给A)

第一步:

在B文件的h文件中创建B文件的协议,并创建发送字符串的方法方法

// 第一步 创建协议

@protocol JYFFirstViewControllerDelegate <<span style="color: #703daa">NSObject>

- (void)sendValue:(NSString *)str;

@end

第二步:

创建id类型的并遵守协议的delegate属性

//   第二步 声明代理属性

@property (nonatomic, assign) id<</span>JYFFirstViewControllerDelegate> delegate;

第三步:

在B文件的跳转按钮中实现delegate对发送字符串方法的调用以获得本文件输入框中的内容

- (void)buttonAction:(UIButton *)sender

{

//    JYFSecondViewController *secondVC = [[JYFSecondViewController alloc] init];

//    [self.navigationController pushViewController:secondVC animated:YES];

//    [secondVC release];

    

    

    //  第三步 让代理发送协议中的方法

    [_delegate sendValue:_textField.text];

    // 返回上一视图

    [self.navigationController popToRootViewControllerAnimated:YES];

}

第四步:

在A文件的m文件中遵守B控制器的代理协议

@interface JYFRootViewController ()<</span>JYFFirstViewControllerDelegate> // 第四步 让此控制器遵守协议

第五步:

在A文件中新创建的B控制器后面,让A做B的代理

 // 1. 创建出要跳转的对象

    JYFFirstViewController *firstVC = [[JYFFirstViewController alloc] init];

    // 第五步  本控制器作为firstVC的代理

    firstVC.delegate = self;

第六步:

在A文件中实现协议中的方法

即接收B文件传过来的输入框的值

// 第六步 

#pragma mark - JYFFirstViewControllerDelegate Methods

- (void)sendValue:(NSString *)str

{

    // 将传过来的值设置到输入框中

    _textField.text = str;

}

 

UINavigationController 导航控制器、页面间通信

标签:

原文地址:http://www.cnblogs.com/littlewrong/p/4909004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!