传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
2015-06-23 16:44
405 查看
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;
}
在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;
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 如何选择路由协议
- BGP边界网关协议
- vbs sendmail发邮件带附件方法
- JavaScript表达式:URL 协议介绍
- Android短信操作常见协议和常用代码
- php下使用SMTP发邮件的代码
- Java邮件发送程序(可以同时发给多个地址、可以带附件)
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 路由信息协议RIP
- 路由器原理及路由协议
- .net平台推送ios消息的实现方法
- php中获取主机名、协议及IP地址的方法