博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS7 CookBook精彩瞬间(三)UIActivityViewController的基本使用及自定义Activity
阅读量:4678 次
发布时间:2019-06-09

本文共 2838 字,大约阅读时间需要 9 分钟。

1.基本使用

UIActivityViewController主要用于分享内容,创建activityView的方法很简单,调用下面的方法创建:

[[UIActivityViewController alloc] initWithActivityItems: applicationActivities:]

第一个参数为要分享的内容数组,可以为任何类,常见的为NSString和UIImage,第二个为自定义Activity数组,每个Activity对应一个按钮,如果只使用系统默认的传入nil。

要显示这个View,使用modal的方式弹出即可。

2.自定义Activity

在微信中打开一个链接,可以通过右上角的按钮打开一个activityView来选择不同的功能,常用的有分享和复制链接,下面我们模拟这个情景,设计一个Activity,实现通过传入的地址用safari打开网站。

①要自定义Activity,要定义一个继承自UIActivity的类,然后重写获取标题、图片和有关活动允许的方法:

头文件:

#import 
@interface BrowserActivity : UIActivity@end
m文件:

#import "BrowserActivity.h"@interface BrowserActivity ()@property (nonatomic, strong) NSArray *activityItems;@end@implementation BrowserActivity- (NSString *)activityTitle{        return @"Browser";    }- (UIImage *)activityImage{        return [UIImage imageNamed:@"browser"];    }- (NSString *)activityType{ // type用于唯一标识活动,一个比较好的方法是用bundleIdentifier加上类名        return [[NSBundle mainBundle].bundleIdentifier stringByAppendingString:NSStringFromClass([self class])];    }- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems{        return YES;    }- (void)prepareWithActivityItems:(NSArray *)activityItems{        self.activityItems = [activityItems copy];    }- (void)performActivity{        if (self.activityItems.count < 1) {        return;    }    NSString *url = [self.activityItems firstObject];    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];}
其中title决定了按钮的标题,image决定了按钮的图片,type用于唯一标识activity。

为了安全性,系统会先调用- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems方法来询问是否可以执行,你可以根据items的类型判断是否合法,返回YES才会进一步操作,调用- (void)prepareWithActivityItems:(NSArray *)activityItems来加载数据,注意一般数据最好copy防止外部突然改变,最后系统会调用- (void)performActivity方法,在这个方法里执行Activity内容,我们是通过Safari打开这个URL。

注意:这里假设传入的元素只有一个,并且是NSString,没有判断,存在隐患,实际应用应该在canPerformWithActivityItems:方法中判断是否可执行

②使用一个textField来编辑url,一个按钮来触发activityView:

#import "ViewController.h"#import "BrowserActivity.h"@interface ViewController () 
@property (weak, nonatomic) IBOutlet UITextField *textField;@property (strong, nonatomic) UIActivityViewController *avc;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}- (IBAction)shareClick:(id)sender { [self presentViewController:self.avc animated:YES completion:nil]; }- (UIActivityViewController *)avc{ if (_avc == nil) { _avc = [[UIActivityViewController alloc] initWithActivityItems:@[self.textField.text] applicationActivities:@[[BrowserActivity new]]]; } return _avc; }- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES]; }
当按下share按钮时,会显示下图的界面:

可以看到第二行已经有了Browser这个Activity,注意系统把图片渲染成了黑色。

当点击了Browser时,即可执行活动,通过Safari打开特定URL。

转载于:https://www.cnblogs.com/aiwz/p/6154033.html

你可能感兴趣的文章
Android版数据结构与算法(二):基于数组的实现ArrayList源码彻底分析
查看>>
Python 学习 --简单购物车程序
查看>>
[poj] 1006 Biorhythms
查看>>
[bzoj4800][Ceoi2015]Ice Hockey World Championship
查看>>
Python 列表 extend() 方法
查看>>
Http请求的构成
查看>>
文档翻译
查看>>
JS常用扩展
查看>>
[BZOJ2963][JLOI2011]飞行路线 分层图+spfa
查看>>
setsockopt 设置socket 详细用法
查看>>
JavaScript逻辑运算符 三元表达式
查看>>
用户和角色:通用权限管理系统数据库表结构如何设计?
查看>>
安装pytorch0.4.0
查看>>
做rl_abs过程中遇到的问题
查看>>
spring多模块项目手动整合
查看>>
SpringMVC中文件的上传(上传到服务器)和下载问题(一)--------上传
查看>>
HashMap详解
查看>>
使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)
查看>>
6.24 AppCan移动开发者大会:议程重大更新,报名即将关闭
查看>>
java范型集合中的成员排序
查看>>