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";
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; //textfieldid <ContactCtrlDelegate> delegate;     //开放delegateNSString *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;
}

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

参考:delegate和protocol

传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)相关推荐

  1. uniapp微信小程序传参方法和注意事项

    传参方法: uni-app官网https://uniapp.dcloud.io/tutorial/vue-components.html#概念 注意事项: 在vue项目中,如果子组件里的props名字 ...

  2. AngularJS中页面传参方法

    1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...

  3. python 构造函数传参_C++和python混合编程之在python类构造函数中传参方法

    C++和python混合编程 零.前言 一.说明 二.测试代码 1.C++代码 2.python代码 三.运行结果 零.前言 C++是一门高效率的语言,Python是一门简单易学的脚本语言,现在Pyt ...

  4. 【vue2】子组件向父组件传参方法汇总

    一.前言 最近在复习vue,总结一下父子组件通信的方式.希望能够一起进步. 二.代码 1.项目介绍 有三个子组件,School.vue.Student.vue.Grade.vue.其中App.vue引 ...

  5. C/C++语言二维数组的传参方法总结

    原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8886687,作者:gqb666 C/C++语言将二维数组 ...

  6. java jsp 传递参数的方法,jsp传参方法小结

    一.jsp页面到jsp页面## 1.从a.jsp传递 //将参数值为aaa,参数名test的参数传递到b.jsp页面中 2.在b.jsp接收 System.out.println("test ...

  7. C/C++ 一维数组的传参/一级指针的传参 二维数组的传参/二级指针的传参 三维数组的传参/三级指针的传参 方法总结分析终极篇

    序 最近复习c/c++数组的传参,发现了一些问题,下面是一些总结和思考 正文 一维数组的传参/一级指针的传参/普通指针 在理解指针的基础上,一维数组的指针传递很简单,我们知道数组的数组名就是这个数组首 ...

  8. 微信小程序bindtap普通事件传参方法

    使用bindtap在组件中绑定一个事件处理函数,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数. 使用data-* 进行传参, <view id="tapTes ...

  9. view路由传参方法

    查看Vue教程(路由Router-传值) - 云+社区 - 腾讯云 得到两种方法进行尝试得到可行 第一种方式: 1.route-link中配置如下段代码所示 <template><u ...

最新文章

  1. 【ACM】杭电OJ 2063
  2. 笔记本电脑5年没清灰了_19年性价比超高的5款笔记本电脑推荐
  3. Promise详解(一) ----基础用法
  4. python list操作复杂度
  5. ubtuntu server下的包管理
  6. (最短路)HDU Today(hdu2112)
  7. 【Python】处理 selenium.common.exceptions.WebDriverException 报错问题
  8. python脱离依赖运行py文件_将一个python.py文件拆分为多个相互依赖的文件
  9. 爬虫福利二之妹子图网批量下载MM
  10. R数据分析:方法与案例详解--自学笔记
  11. 利用modem发传真
  12. TensorFlow之文本分类算法-2
  13. 40了解云计算平台的高可用架构,如 AWS 的多可用区、GCP 的负载均衡器
  14. 3.5计算机网络(无线局域网 PPP协议&HDLC协议 广域网 链路层设备)
  15. gpu z linux版本,GPU-Z 2.13.0发布,可检测到假冒的NVIDIA 显卡
  16. 人工智能-自动机模型
  17. SonicWall防火墙销量超300万套,合作伙伴项目报备量增长50%,
  18. 密码学第三讲——对称密码(XOR与一次性密码本)
  19. 易语言之超级列表框的使用及json解析
  20. Scrum敏捷开发笔记

热门文章

  1. 7 PP配置-生产主数据-工作中心相关-定义工作中心标准值码
  2. java pk .net_Java与.Net大PK
  3. 二进制字符串转换到Ascll字符串
  4. java生成pdf417_生成PDF417的JAVA包.rar
  5. python如何创建模块视频_Python | 如何创建模块(模块示例)?
  6. PS将两张图像合成为一张
  7. knime二次开发节点的项目结构
  8. Kafka刚开启就秒退
  9. Observer的实现
  10. 网站颜色变黑白的CSS代码,Chrome、火狐、IE