多个uiviewController之间传值
来源:互联网 发布:产品网络营销策划方案 编辑:程序博客网 时间:2024/05/20 17:59
主菜单使用NavigationController 在push进去的viewController中选中选项后 将数据传回最外层ViewController
若点击的省市为直辖市的时候,直接传值给RootViewController, 如果点击的省市为非直辖市,则进入城市选项,再次点击城市的时候将值传回RootViewController
则需要在第二层与第三层中都都实现将值传回RootViewController
1.添加协议
PassValueDelegate.h
#import <Foundation/Foundation.h>@protocol PassValueDelegate <NSObject>- (void)passValue:(NSString*)value;@end
第一层 RootViewController 需要调用的为第一层中的函数 则该层为协议的遵守者 ,在.h文件中遵守协议,在.m文件中实现协议中的方法
RootViewController.h
#import <UIKit/UIKit.h>#import "GDataXMLNode.h"#import "PassValueDelegate.h"@interface RootViewController : UIViewController <PassValueDelegate>{ NSString* _cityName; NSString* urlPath; int weatherDay; GDataXMLDocument* doc;}@property (nonatomic,strong) NSString* cityName;@end
RootViewController.m 传进来的为一个String类型的 用于测试,将该值打印出来
//实现passValueDelegate中的方法- (void)passValue:(NSString *)value{ NSLog(@"value = %@",value);}
并且在点击 右上角 切换城市的时候 调用 changeCity方法 设置第二层中代理
- (void)changeCity{ ProvinceViewController* provinceVC = [[ProvinceViewController alloc] init]; //添加代理 provinceVC.passValueDelegate = self; [self.navigationController pushViewController:provinceVC animated:YES]; [provinceVC release];}
第二层为ProvinceViewController, 它为协议中方法的调用者
则需要在.h文件中添加
#import "PassValueDelegate.h"
并且声明 NSObject<PassValueDelegate>*类型的 成员变量
@propert (nonatomic,assign)NSObject<PassValueDelegate>* passValueDelegate;
ProvinceController.h
#import <UIKit/UIKit.h>#import "GDataXMLNode.h"#import "PassValueDelegate.h"@interface ProvinceViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>{ GDataXMLDocument* doc; NSMutableArray* provinceArray; NSMutableArray* cityArray; UITableView* myTableView;}@property (nonatomic,assign) NSObject<PassValueDelegate> *passValueDelegate;@end在ProvinceController.m中 即可调用该协议的方法
[self.passValueDelegate passValue:@"this is a test string!"];
第三层中类似第二层中实现的方法 ,与第二层中不同的是 因为是在第二层中实例化 的第三层的对象 ,对视最终协议的拥有者为RootViewController
则遇到的问题是需要在第二层中设置第三层的代理为 RootViewController 即第一层的对象。
如以下代码
CityViewController* cityVC = [[CityViewController alloc] initWithNibName:nil bundle:nil withCityArray:cityArray]; cityVC.passValueDelegate = (NSObject<PassValueDelegate>*)[self.navigationController.viewControllers objectAtIndex:0]; [self.navigationController pushViewController:cityVC animated:YES]; [cityVC release];
可以用 self.navigationController.viewControllers 这个方法取出此时UInavigation 栈中所有的对象 然后通过索引0取出对象 并赋值给 第三层的代理
到次,可以在第二层和第三层中给第一层赋值。
- 多个uiviewController之间传值
- Swift开发--多个UIViewController之间传值
- UIViewController之间传值:
- UIViewController之间的传值 6种
- 利用构造函数在两个UIViewController之间传值
- iOS UIViewController之间的传值方式之一:委托代理
- UIViewController之间的传值方式二 通知
- UIViewController之间传值的7种方法
- UI 多个视图控制器(UIViewController)间的 协议传值
- 俩个UIViewController之间跳转过度动画 左右推出
- 【UIViewController界面传值】
- 多个UIViewController中复用NIB文件
- Swift实现UIScrollView展示多个UIViewController
- Swift编程(二):UIViewController之间的传值以及闭包回调传值
- 多个Activity之间传值
- 多个Activity之间传值
- 多个ViewController之间传值
- 多个Activity之间传值
- 一个起点
- GUI 剖析之 键盘方向键控制鼠标移动的实现
- ubuntu 12.04 与WINDOWS 文件共享解决
- 用AnimateWindow函数可以实现多种窗口的多种动态效果
- php运用adodb连接不同数据库
- 多个uiviewController之间传值
- php运用adodb连接不同数据库(实例)
- jsp标准标签库
- ios5 自定义导航条问题
- 大数据处理的方法
- seasar总结
- GUI剖析之 获取屏保控制窗口显示模式的实现(屏保应用)
- 2012 SCI收录期刊及影响因子(3/10)
- Qt 4.8.3 中资源文件找不到的错误