IOS页面间得传值方式

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一.通过Delegate来传递数据

本节主要来讲解如何使用委托delegate在不同窗口之间传递数据,具体内容来看下面的详细内容。

比如: 在窗口1中打开窗口2,然后在窗口2中填入一个数字,这个数字又回传给窗口1。

窗口1

窗口2

窗口2的结果传递给窗口1

1、首先定义个一委托UIViewPassValueDelegate用来传递值

@PRotocolUIViewPassValueDelegate- (void)passValue:(NSString *)value;@end

这个protocol 就是用来传递值

2、在窗口1的头文件里,声明delegate

#import<UIKit/UIKit.h>#import"UIViewPassValueDelegate.h"@interfaceDelegateSampleViewController : 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方法,打开窗口2,并将窗口2的delegate实现方法指向窗口1。

- (IBAction)buttonClick:(id)sender

{

ValueInputView*valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView"bundle:[NSBundle mainBundle]];

valueView.delegate=self;

[self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];

[self presentModalViewController:valueView animated:YES];

}

第二个窗口的实现

.h 头文件

#import<UIKit/UIKit.h>#import"UIViewPassValueDelegate.h"@interfaceValueInputView : 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"@implementationValueInputView@synthesizedelegate;@synthesizevalue =_value;- (void)dealloc {

[self.value release];

[super dealloc];

}- (IBAction)buttonClick:(id)sender

{

[delegatepassValue:self.value.text];

NSLog(@"self.value.text is%@", self.value.text);

[self dismissModalViewControllerAnimated:YES];

}- (void)didReceiveMemoryWarning {//Releases the view if it doesn't have a superview.[super didReceiveMemoryWarning];//Release any cached data, images, etc. that aren't in use.}- (void)viewDidUnload {

[super viewDidUnload];//Release any retained subviews of the main view.//e.g. self.myOutlet = nil;}@end

二.利用单例实现不同界面间的数据传输

首先写一个单例类,继承NSObject

check.h文件中

@property(strong ,nonatomic) UITable *Table;

@property(strong ,nonitomic) UITextFiled*Text;+(check*)shareDataModle;

check.m中

//定义一个静态的checke类的对象,并赋给一个空值

staticcheck * dataModle =nil;+(check*)shareDataModle

{if(dataModle ==nil)

{

dataModle=[[check alloc]init];

}

}

//在数据源将数据赋值给单例的对象

-(void)checkDataSource

{

[check shareDatamodle].Lable=@"15";

[check shareDatamodle].Text=@"22";

}

//引入单例的头文件 ,在对应定的方法中给对应的对象赋值

//将单例中的属性值传给当前界面中的接收对象,到此就完成了数据的传送和接收

-(void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

self.numberLable.text=[check shareDataModle].Lable;

self.danHao.text=[check shareDataModle].Text;

}

三.iOS开发中使用[[UIapplicationsharedApplication] openURL:] 加载其它应用

在iOS开发中,经常需要调用其它App,如拨打电话、发送邮件等。UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的模式来调用不同的App。

通过openURL方法可以调用如下应用:

调用浏览器(Safari Browser)

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http:google.com"]];

调用谷歌地图(Google Maps)

NSString *addressText =@"7 Hanover Square, New York, NY 10004";

addressText=[addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];

NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];

调用邮件客户端(Apple Mail)

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];

拨号(Phone Number)

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://6463777303"]];

调用短信(SMS)

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://466453"]];

调用应用商店(AppStore)

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=291586600&amp;amp;mt=8"]];

四.使用NSUerDefaults或文件持久化数据后实现页面间数据的传递

IOS下可以使用NSUserDefaults、sqlite、CoreData几种常用的方式来存储数据,其中NSUserDefaults用来存储类似用户的配置等这些的数据,后两者用户存储大批量和比较复杂的数据。NSUserDefault的使用比较简单:

NSUserDefaults *mySettingData = [NSUserDefaults standardUserDefaults];

创建NSUserDefaults对象之后即可往里面添加数据,它支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型,如果要存放自定义的对象(如自定义的类对象),则必须将其转换成NSData存储:

NSArray *arr = [[NSArray alloc] initWithObjects:@"arr1",@"arr2", nil]

[mySettingData setObject:arr forKey:@"arrItem"];

[mySettingData setObject:@"admin"forKey:@"user_name"];

[mySettingData setBOOL:@YES forKey:@"auto_login"];

[mySettingData setInteger:1forKey:@"count"];

往NSUserDefaults添加数据后,它们就变成了全局的变量,App中即可读写NSUserDefault中的数据:NSUserDefaults *mySettingDataR =[NSUserDefaults standardUserDefaults];

NSLog(@"arrItem=%@", [mySettingDataR objectForKey:@"arrItem"]);

NSLog(@"user_name=%@", [mySettingDataR objectForKey:@"user_name"]);

NSLog(@"count=%d", [mySettingDataR integerForKey:@"count"]);

如果想删除某个数据项,可以使用removeObjectForKey删除数据:

[mySettingData removeObjectForKey:@"arrItem"];

需要注意的是,NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:[mySettingData synchronize];

运行上面的语句后,NSUserDefaults中的数据即被写入到.plist文件中,如果是在模拟器上运行程序,可以在Mac的/Users/YOUR-USERNAME/Library/Application Support/iphone Simulator/4.1/Applications/YOUR-APP-DIR/Library/Prefereces目录下面找到一个文件名为YOUR-Bundle_Identifier.plist的plist文件,用Xcode打开该文件,可以看到刚才写入的数据。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航