在开发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用来传递值
- ( void )passValue:(NSString * )value;
@end
2.在父窗口的头文件里,声明delegate
#import " UIViewPassValueDelegate.h "
@interface DelegateSampleViewController : UIViewController < UIViewPassValueDelegate >
{
UITextField * _value;
}
@property(nonatomic, retain) IBOutlet UITextField * value;
- (IBAction)buttonClick:(id)sender;
@end
并在父窗口当中实现这个委托
{
self.value.text = value;
NSLog( @" the get value is %@ " , value);
}
button的Click方法,打开子窗口,并在子窗口中的delegate实现方法指向父窗口。
{
ValueInputView * valueView = [[ValueInputView alloc] initWithNibName: @" ValueInputView " bundle:[NSBundle mainBundle]];
valueView. delegate = self; // 把两个VC关联起来!
[self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:valueView animated:YES];
}
子窗口的实现
.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实现文件
@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