UIMenuController/UIPasteboard(2) UITableView上实用剪贴板

╄→гoц情女王★ 提交于 2020-03-04 02:10:17

在UITableView上实用剪贴板有两种方法:

一、在tableView的代理方法中直接有三个有关剪贴板的方法。

//某行是否允许show菜单
-(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return   YES;
}
//show菜单中能使用的功能
-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender
{
    if (action == @selector(cut:)){
        
        
        return YES;
        
    }  else if(action == @selector(copy:)){
        
        
        return YES;
        
    }
    
    else if(action == @selector(paste:)){
        
        
        return YES;
        
    }
    
    else if(action == @selector(select:)){
        
        
        return NO;
        
    }
    
    else if(action == @selector(selectAll:)){
        
        
        return YES;
        
    }    else  {
        
        return [super canPerformAction:action withSender:sender];    
        
    }
}


//点击菜单中调用
-(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender
{
    
    if (action ==@selector(copy:)) {
        //to do ,然后刷新tableView
        
    }
    
    if (action ==@selector(cut:)) {
        
    }
    
    if (action ==@selector(paste:)) {
        
    }
    
    
}

 

 

 

效果棒棒嗒。

 

 

二、自定义tableViewCell中的粘贴板

在tableViewCell中实现

-(BOOL) canPerformAction:(SEL)action withSender:(id)sender {    return (action == @selector(copy:) || action == @selector(test:));}-(BOOL)canBecomeFirstResponder {    return YES;}/// this methods will be called for the cell menu items-(void) test: (id) sender {}-(void) copy:(id)sender {}

不过还有最重要的一步,激发copy菜单,有多种方式。

1.

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {

  [[self delegate] performSelector:@selector(showMenu:)

      withObject:self afterDelay:0.9f];

[super setHighlighted:highlighted animated:animated];

 }

 //delegate  中

- (void)showMenu:(id)cell {

    if ([cell isHighlighted]) {

         [cell becomeFirstResponder];

        UIMenuController * menu = [UIMenuController sharedMenuController];

        [menu setTargetRect: [cell frame] inView: [self view]];

        [menu setMenuVisibleYES animatedYES];

    }

}

2. 设置一个手势用来激发 ps:为了让菜单显示,目标视图必须在 responder 链中,很多 UIKit 视图默认并无法成为一个 responder ,因此你需要之类这些视图重载 canBecomeFirstResponder 方法范围 YES

在cell中加一个手势:和delegate原理是一样的。

 // CGRect  popoverRect = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath] toView:[tableView superview]];

//
//  FXCell.m
//  FeixunUniversal
//
//  Created by zpz on 15/10/11.
//  Copyright (c) 2015年 zpz. All rights reserved.
//

#import "FXCell.h"

@implementation FXCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
        [self addGestureRecognizer:longPressGesture];
        self.userInteractionEnabled = YES;
        self.backgroundColor = [UIColor yellowColor];

    }
    return self;
}


//实现长按
- (void)longPress:(UILongPressGestureRecognizer *)longPress
{
    if (longPress.state == UIGestureRecognizerStateBegan) {
        [self becomeFirstResponder];
        //自定义方法   系统方法在
        UIMenuItem *flagItemA = [[UIMenuItem alloc] initWithTitle:@"A就是我" action:@selector(methodA:)];
        UIMenuItem *flagItemB = [[UIMenuItem alloc] initWithTitle:@"我是方法B" action:@selector(methodB:)];
        UIMenuController *menu = [UIMenuController sharedMenuController];
        [menu setMenuItems:@[flagItemA,flagItemB]];
        [menu setTargetRect:self.frame inView:self.superview];
        [menu setMenuVisible:YES animated:YES];
    }
}

//系统自带的方法  不实现canPerformAction: withSender:默认为return NO
/*
 - (void)cut:(id)sender NS_AVAILABLE_IOS(3_0);
 - (void)copy:(id)sender NS_AVAILABLE_IOS(3_0);
 - (void)paste:(id)sender NS_AVAILABLE_IOS(3_0);
 - (void)select:(id)sender NS_AVAILABLE_IOS(3_0);
 - (void)selectAll:(id)sender NS_AVAILABLE_IOS(3_0);
 - (void)delete:(id)sender NS_AVAILABLE_IOS(3_2);
 - (void)makeTextWritingDirectionLeftToRight:(id)sender NS_AVAILABLE_IOS(5_0);
 - (void)makeTextWritingDirectionRightToLeft:(id)sender NS_AVAILABLE_IOS(5_0);
 - (void)toggleBoldface:(id)sender NS_AVAILABLE_IOS(6_0);
 - (void)toggleItalics:(id)sender NS_AVAILABLE_IOS(6_0);
 - (void)toggleUnderline:(id)sender NS_AVAILABLE_IOS(6_0);
 
 - (void)increaseSize:(id)sender NS_AVAILABLE_IOS(7_0);
 - (void)decreaseSize:(id)sender NS_AVAILABLE_IOS(7_0);
 */
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    if (action == @selector(cut:)){
        return NO;
    }
    else if(action == @selector(copy:)||action == @selector(paste:)){
        return YES;
    }else if(action == @selector(methodA:) || action == @selector(methodB:)){
    
        return YES;
    }
    else{
        return [super canPerformAction:action withSender:sender];
    }
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)copy:(id)sender {
    UIPasteboard *gpBoard = [UIPasteboard generalPasteboard];
    
    NSString *theTile = self.textLabel.text;
    
    gpBoard.string = theTile;
    
}
- (void)paste:(id)sender
{
    [super paste:sender];
    //从UIPasteboard 单例中读取内容 操作
//    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    
}

- (void)cut:(id)sender
{
    [super cut:sender];
    

}
- (void)methodA:(id)sender
{
    NSLog(@"我是A");
}

- (void)methodB:(id)sender
{
    NSLog(@"我是B");
}


//- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
//    [[self delegate] performSelector:@selector(showMenu:)
//                          withObject:self];
//    [super setHighlighted:highlighted animated:animated];
//}


- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

效果图如下:

 如需了解更多iOS 复制粘贴理论知识请移步我的另一篇文章:

http://www.cnblogs.com/zpz5789/p/4870798.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!