iOS開發應用剪貼簿功能教程是本文要介紹的內容,在iOS中,可以使用剪貼簿實現應用程式之中以及應用程式之間實現資料的共用。比如你可以從iPhone QQ複製一個url,然後粘貼到safari瀏覽器中查看這個連結的內容。
一、在iOS中下面三個控制項,自身就有複製-粘貼的功能:
1、UITextView
2、UITextField
3、UIWebView
二、UIKit framework提供了幾個類和協議方便我們在自己的應用程式中實現剪貼簿的功能。
1、UIPasteboard:我們可以向其中寫入資料,也可以讀取資料
2、UIMenuController:顯示一個捷徑功能表,用來複製、剪貼、粘貼選擇的項。
3、UIResponder中的 canPerformAction:withSender:用於控制哪些命令顯示在捷徑功能表中。
4、當捷徑功能表上的命令點擊的時候,UIResponderStandardEditActions將會被調用。
三、下面這些項能被放置到剪貼簿中
1、UIPasteboardTypeListString — 字串數組, 包含kUTTypeUTF8PlainText
2、UIPasteboardTypeListURL — URL數組,包含kUTTypeURL
3、UIPasteboardTypeListImage — 圖形數組, 包含kUTTypePNG 和kUTTypeJPEG
4、UIPasteboardTypeListColor — 顏色數組
四、剪貼簿的類型分為兩種:
系統級:使用UIPasteboardNameGeneral和UIPasteboardNameFind建立,系統級的剪貼簿,當應用程式關閉,或者卸載時,資料都不會丟失。
應用程式級:通過設定,可以讓資料在應用程式關閉之後仍然儲存在剪貼簿中,但是應用程式卸載之後資料就會失去。我們可用通過pasteboardWithName:create:來建立。
瞭解這些之後,下面通過一系列的例子來說明如何在應用程式中使用剪貼簿。
例子:
1、複製剪貼文本。
下面通過一個例子,可以在tableview上顯示一個捷徑功能表,上面只有複製按鈕,複製tableview上的資料之後,然後粘貼到title上。
定義一個儲存格類CopyTableViewCell,在這個類的上顯示捷徑功能表,實現複製功能。
- @interface CopyTableViewCell : UITableViewCell {
- id delegate;}@property (nonatomic, retain) id delegate;
- @end
實現CopyTableViewCell :
- #import "CopyTableViewCell.h"@implementation CopyTableViewCell@synthesize delegate;
- - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
- {
- if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { }
- return self;
- }
- - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
- [super setSelected:selected animated:animated];
- }
- - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
- [[self delegate] performSelector:@selector(showMenu:)
- withObject:self afterDelay:0.9f];
- [super setHighlighted:highlighted animated:animated];
- }
- - (BOOL)canBecomeFirstResponder {
- return YES;
- }
- - (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
- if (action == @selector(cut:)){
- return NO;
- } else if(action == @selector(copy:)){
- return YES;
- }
- else if(action == @selector(paste:)){
- return NO;
- }
- else if(action == @selector(select:)){
- return NO;
- }
- else if(action == @selector(selectAll:)){
- return NO;
- } else {
- return [super canPerformAction:action withSender:sender];
- }
- }
- - (void)copy:(id)sender {
- UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
- [pasteboard setString:[[self textLabel]text]];
- }
- - (void)dealloc {
- [super dealloc];
- }
- @end
定義CopyPasteTextController,實現粘貼功能。
- @interface CopyPasteTextController : UIViewController<UITableViewDelegate>
- {
- //用來標識是否顯示捷徑功能表
- BOOL menuVisible;
- UITableView *tableView;
- }
- @property (nonatomic, getter=isMenuVisible) BOOL menuVisible;
- @property (nonatomic, retain) IBOutlet UITableView *tableView;
- @end
實現CopyPasteTextController :
- #import "CopyPasteTextController.h"
- #import "CopyTableViewCell.h"
- @implementation CopyPasteTextController
- @synthesize menuVisible,tableView;
- - (void)viewDidLoad {
- [super viewDidLoad];
- [self setTitle:@"文字複製粘貼"]; //點擊這個按鈕將剪貼簿的內容粘貼到title上
- UIBarButtonItem *addButton = [[[UIBarButtonItem alloc]
- initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
- target:self
- action:@selector(readFromPasteboard:)]
- autorelease];
- [[self navigationItem] setRightBarButtonItem:addButton];
- }
- // Customize the number of sections in the table view.
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
- return 1;
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
- return 9;}// Customize the appearance of table view cells.
- - (UITableViewCell *)tableView:(UITableView *)tableView
- cellForRowAtIndexPath:(NSIndexPath *)indexPath{
- static NSString *CellIdentifier =@"Cell";
- CopyTableViewCell *cell = (CopyTableViewCell *)
- [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[[CopyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
- [cell setDelegate:self];
- }
- // Configure the cell.
- NSString *text = [NSString stringWithFormat:@"Row %d", [indexPath row]];
- [[cell textLabel] setText:text];
- return cell;
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
- if([self isMenuVisible]) {
- return;
- }
- [[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES
- animated:YES];}//顯示菜單- (void)showMenu:(id)cell {
- if ([cell isHighlighted]) {
- [cell becomeFirstResponder];
- UIMenuController * menu = [UIMenuController sharedMenuController];
- [menu setTargetRect: [cell frame] inView: [self view]];
- [menu setMenuVisible: YES animated: YES];
- }
- }
- - (void)readFromPasteboard:(id)sender {
- [self setTitle:[NSString stringWithFormat:@"Pasteboard = %@",[[UIPasteboard generalPasteboard] string]]];
- }
- - (void)didReceiveMemoryWarning{
- // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning];
- // Relinquish ownership any cached data, images, etc that aren't in use.
- }
- - (void)viewDidUnload{
- [super viewDidUnload];
- [self.tableView release];
- // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
- // For example: self.myOutlet = nil;
- }
效果:
複製一行資料:
點擊右上方的按鈕粘貼,將資料顯示在title上: