iOS7 CookBook精彩瞬间(三)UIActivityViewController的基本使用及自定义Activity
来源:互联网 发布:microsoft软件有哪些 编辑:程序博客网 时间:2024/06/16 09:14
1.基本使用
UIActivityViewController主要用于分享内容,创建activityView的方法很简单,调用下面的方法创建:
[[UIActivityViewController alloc] initWithActivityItems: applicationActivities:]
第一个参数为要分享的内容数组,可以为任何类,常见的为NSString和UIImage,第二个为自定义Activity数组,每个Activity对应一个按钮,如果只使用系统默认的传入nil。
要显示这个View,使用modal的方式弹出即可。
2.自定义Activity
在微信中打开一个链接,可以通过右上角的按钮打开一个activityView来选择不同的功能,常用的有分享和复制链接,下面我们模拟这个情景,设计一个Activity,实现通过传入的地址用safari打开网站。
①要自定义Activity,要定义一个继承自UIActivity的类,然后重写获取标题、图片和有关活动允许的方法:
头文件:
#import <UIKit/UIKit.h>@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 () <UITextFieldDelegate>@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。
- iOS7 CookBook精彩瞬间(三)UIActivityViewController的基本使用及自定义Activity
- iOS7 CookBook精彩瞬间(一)property、selector细节、__unused
- iOS7 CookBook精彩瞬间(二)NSSet、通过Subscript访问类成员等
- UIActivityViewController的使用
- UIActivityViewController的使用(Swift实现)
- 使用UIActivityViewController展现自定义分享选项
- UITableView的基本使用三(自定义Cell)
- 自定义View (三)Graphics2D 的基本使用
- UIActivityViewController使用
- U3D 三种实现截屏保存精彩瞬间方式
- redis教程(三):Redis数据类型及基本的使用
- Android学习系列之(三)Activity的基本使用
- 留住精彩瞬间(T900)
- 自定义ORM系列(三)工具雏形及基本用法
- UIActivityViewController及其自定义
- MarkDownPad2实现数学公式的live preview的精彩瞬间
- 比尔·盖茨的十大精彩瞬间
- 比尔·盖茨生平的10大精彩瞬间
- 2015.8.31心情录
- 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置
- 灵活强大的构建系统Gradle
- (4.2.16.3)判断某Activity是否在系统中存在?是否启动过?以及让它自行关闭
- 静态内部类、非静态内部类以及匿名类之间的区别
- iOS7 CookBook精彩瞬间(三)UIActivityViewController的基本使用及自定义Activity
- 【生成树计数】【矩阵树】【模板】
- OpenCv 获取某一区域的RGB平均值
- 工作心情--两个月有感
- Python--Tkinter之 Button()/Checkbutton()/Radiobutton()
- 【tarjan】【割点】
- java
- ee
- hi