UIMenuController的简单使用

UIMenuController 使用详解
本文介绍了如何在 iOS 应用中使用 UIMenuController 实现自定义的上下文菜单功能。通过创建 ZsyTextField 类并重写相应方法,文章详细展示了如何添加长按手势识别并设置上下文菜单项及其响应动作。
//
//  ZsyTextField.m
//  UIMenuController使用简介
//
//  Created by Zsy on 15/3/2.
//  Copyright © 2017年 Zsy. All rights reserved.
//

#import "ZsyTextField.h"

@implementation ZsyTextField

- (void)awakeFromNib {
    [self setUp];
}

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self setUp];
    }
    return self;
}

- (void)setUp {
    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress)]];
}

- (void)longPress {
    //1.设置label为第一响应者
    //通过设置第一响应者UIMenuController可以获得支持哪些操作的信息,操作怎么处理
    [self becomeFirstResponder];

    //2.设置UIMenuController
    UIMenuController * menu = [UIMenuController sharedMenuController];
    //当长按label的时候,这个方法会不断调用,menu就会出现一闪一闪不断显示,需要在此处进行判断
    if (menu.isMenuVisible) {
        return;
    }
    UIMenuItem *item1 = [[UIMenuItem alloc] initWithTitle:@"剪切" action:@selector(myCut:)];
    UIMenuItem *item2 = [[UIMenuItem alloc] initWithTitle:@"粘贴" action:@selector(myPasete:)];
    UIMenuItem *item3 = [[UIMenuItem alloc] initWithTitle:@"清空" action:@selector(myEmpty:)];
    menu.menuItems = @[item1, item2, item3];
    [menu setTargetRect:self.bounds inView:self];
    [menu setMenuVisible:YES animated:YES];
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(myCut:) || action == @selector(myPasete:) || action == @selector(myEmpty:)) {
        return YES;
    }
    return NO;
}

- (void)myCut:(UIMenuController *)menu {
    [self copy:menu];
    self.text = nil;
}

- (void)cut:(UIMenuController *)menu {
    [self copy:menu];
    self.text = nil;
}

- (void)copy:(UIMenuController *)menu {
    if (!self.text) {
        return;
    }
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    paste.string = self.text;
}

- (void)myPasete:(UIMenuController *)menu {
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    self.text = paste.string;
}

- (void)myEmpty:(UIMenuController *)menu {
    self.text = nil;
}

@end

 

转载于:https://my.oschina.net/zsyzone/blog/850189

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值