您的位置:首页 > 移动开发

传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)

2012-12-27 10:36 357 查看
1. 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";

//stringByAddingPercentEscapesUsingEncoding为数据转换,7%20Hanover%20Square%20New%20York%20%NY%2010004

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&mt=8"]];

2. NSUserDefaults读取和写入自定义对象

NSString *string = [NSString stringWithString @"data is here"];

NSUserDefaults *data = [NSUserDefaults standardUserDefaults];

[data setObject:string forKey:@"key"];

NSString *value;

value = [data objectForKey:"key"];

但是并不是所有的东西都能往里放的。NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

3. protocol 和 delegate 回调函数传值

一、说明
1.协议声明了可以被任何类实现的方法
2.协议不是类,它是定义了一个其他对象可以实现的接口
3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。
4.协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。
5:委托,就是调用自己定义方法,别的类来实现。
6.新特性说明
@optional预编译指令:表示可以选择实现的方法
@required预编译指令:表示必须强制实现的方法

二、定义

.h

@protocol ContactCtrlDelegate

- (void)DismissContactsCtrl;

- (void)CallBack:(NSString *)str; //回调传值

@end

@interface ContactsCtrl : UIViewController {

id <ContactCtrlDelegate> delegate;

}

@property (nonatomic, assign) id <ContactCtrlDelegate> delegate;

.m

@synthesize delegate;

三、Demo

二级窗口(子窗口)UIViewController subclass

1 Textfield

1 Button

1、ContactsCtrl.h

#import <UIKit/UIKit.h>

//定义协议

@protocol ContactCtrlDelegate

- (void)DismissContactsCtrl; //回调关闭窗口

- (void)CallBack:(NSString *)str; //回调传值

@end

@interface ContactsCtrl : UIViewController

{

__weak IBOutlet UITextField *passData; //textfield

id <ContactCtrlDelegate> delegate; //开放delegate

NSString *passedVal; //从主窗口获取传值

}

@property(nonatomic,retain)id <ContactCtrlDelegate> delegate;

@property(nonatomic,retain)NSString *passedVal;

- (IBAction)cancelBtn:(id)sender;

@end

2、ContactsCtrl.m

@implementation ContactsCtrl

@synthesize delegate;

@synthesize passedVal;

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.

passData.text = passedVal;

}

//调用协议中的方法

- (IBAction)cancelBtn:(id)sender

{

[delegate CallBack:[NSString stringWithFormat:@"%@",passData.text]];

[delegate DismissContactsCtrl];

}

一级窗口(父窗口)

1 Textfield

1 Button

3、ViewController.h

#import <UIKit/UIKit.h>

#import "ContactsCtrl.h" //引入二级文件

@interface ViewController : UIViewController <ContactCtrlDelegate>

{

ContactsCtrl *contactsView; //定义

__weak IBOutlet UITextField *textfield;

}

@property(nonatomic,retain) ContactsCtrl *contactsView;

- (IBAction)addContactsView:(id)sender;

@end

4、ViewController.m

#import "ViewController.h"

@implementation ViewController

@synthesize contactsView;

- (IBAction)addContactsView:(id)sender

{

ContactsCtrl *contactView = [[ContactsCtrl alloc] initWithNibName:nil bundle:nil];

self.contactsView = contactView;

contactsView.delegate = self; //设置委托

contactsView.passedVal = textfield.text;

[self presentModalViewController:contactsView animated:YES];

}

//实现ContactCtrlDelegate协议中的方法

- (void)DismissContactsCtrl

{

[contactsView dismissModalViewControllerAnimated:YES];

}

- (void)CallBack:(NSString *)str

{

textfield.text = str;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐