关于多个ViewController之间进行数据传递的方法
2012-12-14 11:15
381 查看
在开发iOS程序时,发现其基本操作中,在多个ViewController之间进行数据传递是一个非常常用的功能,因此特总结。方法方面,其实挺多的,真是各有个的好吧。只要能够实现功能,使用哪些,应该由用户之际决定。
1、通过application delegate对象处理。
ChartMAppDelegate * mydelegat =[[UIApplication
sharedApplication] delegate];
mydelegat.serverIP =
serIpaddr.text;
需要注意的是在delegate当中,需要是定set和get方法,或者使用property或synthersize
2、使用NSUserDefault
NSString * string = [NSString stringWithString:@"nihao"];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:string forKey:@"mykey"];
读的时候参考如下代码:
NSString * value;
value = [ud objectForKey:@"mykey"];
3、使用在父窗口中获得子窗口设定的数据,这样可以采用定义委托的方式。第一窗口为父窗口,第二窗口为子窗口
1.首先在父窗口中去定义个一委托UIViewPassValueDelegate用来传递值
@protocol UIViewPassValueDelegate
- (void)passValue:(NSString *)value;
@end
2.在父窗口的头文件里,声明delegate
#import <UIKit/UIKit.h>
#import "UIViewPassValueDelegate.h"
@interface DelegateSampleViewController : UIViewController <UIViewPassValueDelegate>
{
UITextField *_value;
}
@property(nonatomic, retain) IBOutlet UITextField *value;
- (IBAction)buttonClick:(id)sender;
@end
并在父窗口当中实现这个委托
- (void)passValue:(NSString *)value
{
self.value.text = value;
NSLog(@"the get value is %@", value);
}
button的Click方法,打开子窗口,并在子窗口中的delegate实现方法指向父窗口。
- (IBAction)buttonClick:(id)sender
{
ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];
valueView.delegate = self; //
把两个VC关联起来!
[self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:valueView animated:YES];
}
子窗口的实现
.h 头文件
#import <UIKit/UIKit.h>
#import "UIViewPassValueDelegate.h"
@interface ValueInputView : UIViewController {
NSObject<UIViewPassValueDelegate> * delegate;
UITextField *_value;
}
@property(nonatomic, retain)IBOutlet UITextField *value;
@property(nonatomic, retain) NSObject<UIViewPassValueDelegate> * delegate;
- (IBAction)buttonClick:(id)sender;
@end
.m实现文件
#import "ValueInputView.h"
@implementation ValueInputView
@synthesize delegate;
@synthesize value = _value;
- (void)dealloc {
[self.value release];
[super dealloc];
}
- (IBAction)buttonClick:(id)sender
{
[delegate passValue:self.value.text]; // 具体的实现在第一个VC里。
NSLog(@"self.value.text is%@", self.value.text);
[self dismissModalViewControllerAnimated:YES];
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
@end
1、通过application delegate对象处理。
ChartMAppDelegate * mydelegat =[[UIApplication
sharedApplication] delegate];
mydelegat.serverIP =
serIpaddr.text;
需要注意的是在delegate当中,需要是定set和get方法,或者使用property或synthersize
2、使用NSUserDefault
NSString * string = [NSString stringWithString:@"nihao"];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:string forKey:@"mykey"];
读的时候参考如下代码:
NSString * value;
value = [ud objectForKey:@"mykey"];
3、使用在父窗口中获得子窗口设定的数据,这样可以采用定义委托的方式。第一窗口为父窗口,第二窗口为子窗口
1.首先在父窗口中去定义个一委托UIViewPassValueDelegate用来传递值
@protocol UIViewPassValueDelegate
- (void)passValue:(NSString *)value;
@end
2.在父窗口的头文件里,声明delegate
#import <UIKit/UIKit.h>
#import "UIViewPassValueDelegate.h"
@interface DelegateSampleViewController : UIViewController <UIViewPassValueDelegate>
{
UITextField *_value;
}
@property(nonatomic, retain) IBOutlet UITextField *value;
- (IBAction)buttonClick:(id)sender;
@end
并在父窗口当中实现这个委托
- (void)passValue:(NSString *)value
{
self.value.text = value;
NSLog(@"the get value is %@", value);
}
button的Click方法,打开子窗口,并在子窗口中的delegate实现方法指向父窗口。
- (IBAction)buttonClick:(id)sender
{
ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];
valueView.delegate = self; //
把两个VC关联起来!
[self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:valueView animated:YES];
}
子窗口的实现
.h 头文件
#import <UIKit/UIKit.h>
#import "UIViewPassValueDelegate.h"
@interface ValueInputView : UIViewController {
NSObject<UIViewPassValueDelegate> * delegate;
UITextField *_value;
}
@property(nonatomic, retain)IBOutlet UITextField *value;
@property(nonatomic, retain) NSObject<UIViewPassValueDelegate> * delegate;
- (IBAction)buttonClick:(id)sender;
@end
.m实现文件
#import "ValueInputView.h"
@implementation ValueInputView
@synthesize delegate;
@synthesize value = _value;
- (void)dealloc {
[self.value release];
[super dealloc];
}
- (IBAction)buttonClick:(id)sender
{
[delegate passValue:self.value.text]; // 具体的实现在第一个VC里。
NSLog(@"self.value.text is%@", self.value.text);
[self dismissModalViewControllerAnimated:YES];
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
@end
相关文章推荐
- ios不同的viewcontroller之间数据传递方法
- 在ViewController之间传递数据的方法【iOS】
- MVC中的页面传值,通常指Controller和view之间的数据传递,经常用到的有几种方式,总结如下:
- ViewController之间的转场和数据传递
- MVC中Controller与View之间的数据传递
- 【转】总结.NET MVC中Controller与View之间的数据传递
- 【转载】ASP.NET MVC中Controller与View之间的数据传递总结
- IOS VIEW之间数据传递的方法
- 如何在两个ViewController之间传递数据
- ASP.NET MVC中Controller与View之间的数据传递总结
- ASP.NET MVC中Controller与View之间的数据传递总结 (来自网络)
- 译:什么是ViewData的, ViewBag和TempData? - MVC为当前和后续请求之间传递数据的三种方法
- ASP.NET MVC3中Controller与View之间的数据传递总结
- ASP.NET MVC_Controller和View之间数据传递(前后台数据传递)方式
- ASP.NET MVC中Controller与View之间的数据传递总结
- ios中两个viewcontroller之间如何传递数据
- 如何在两个ViewController之间传递数据
- MVC中Controller与View中间的数据传递的常用方法
- MVC进阶学习--View和Controller之间的数据传递(二)
- Asp.net MVC 学习笔记 (3) --Controller 与View 之间的数据传递