标签:
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