·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> IOS页面间得传值方式

IOS页面间得传值方式

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23
一.通过Delegate来传递数据

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

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

窗口1

IOS开发使用委托delegate在不同窗口之间传递数据

窗口2

IOS开发使用委托delegate在不同窗口之间传递数据

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

IOS开发使用委托delegate在不同窗口之间传递数据

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

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

这个protocol 就是用来传递值

2、在窗口1的头文件里,声明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方法,打开窗口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"  
 
@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];  
    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类的对象,并赋给一个空值

  static check * 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开发中使用[[UIapplication sharedApplication] 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://[email protected]"]];  

拨号(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:1 forKey:@"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打开该文件,可以看到刚才写入的数据。