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

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

2012-04-01 10:15 267 查看
1. iOS开发中使用[[UIApplication sharedApplication] openURL:] 加载其它应用

 

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

 

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

 

调用浏览器(Safari Browser)

C代码  


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

 
调用谷歌地图(Google Maps)

C代码  


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)

C代码  


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

 
拨号(Phone Number)

C代码  


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

 
调用短信(SMS)

C代码  


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

 
调用应用商店(AppStore)

C代码  


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

 

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

C代码  


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

C代码  


@protocol ContactCtrlDelegate  
- (void)DismissContactsCtrl;  
- (void)CallBack:(NSString *)str; //回调传值  
@end  
  
@interface ContactsCtrl : UIViewController {  
    id <ContactCtrlDelegate> delegate;  
}  
@property (nonatomic, assign) id <ContactCtrlDelegate> delegate;  

 
.m

C代码  


@synthesize delegate;  

 

三、Demo

 

二级窗口(子窗口)UIViewController subclass

 

1 Textfield

1 Button
1、ContactsCtrl.h  

C代码  


#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

C代码  


@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

C代码  


#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

C代码  


#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;  
}  

 
本实例是在:http://www.codeios.com/blog-21-13.html  基础上修改而成。

 

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