您的位置:首页 > 其它

关于多个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: