iOS--UI UIMenuController的使用

本文详细介绍了在iOS开发中如何使用UIMenuController,以UILabel为示例,通过具体代码展示了如何实现控件的右键菜单功能,为用户交互提供便利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、有以下控件已经支持UIMenuController
1. UITextFiled
2. UIWebView
3. UITextView
2、让其他控件支持UIMenuController
a) 自定义控件
b) 必须实现两个方法,方法如下:
// 使控件成为第一响应者
- (BOOL)canBecomeFirstResponder{
    return YES;
}
// 控件能执行的方法比如(复制,粘贴...)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
return YES;
}
c) 实现各种操作方法,方法如下:
// 复制
-(void)copy:(UIMenuController *)menu{
    // 将粘贴板上的内容复制给自己
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    self.text = paste.string;
}
// 剪切
-(void)cut:(UIMenuController *)menu{
    [self copy:menu];
    // 清空文字
    self.text = nil;
}
d) 让控件成为第一响应者
    // self指的是控件
    [self becomeFirstResponder];
e) 显示UIMenuController
// 显示menuController
    UIMenuController *menu = [UIMenuController sharedMenuController];
    //[menu setTargetRect:self.frame inView:self.superView];可以用下面代替
    //TargetRect:MenuController需要指向的矩形距离
    //TargetView:targetRect会以它的左上角为坐标原点
    [menu setTargetRect:self.bounds inView:self];
    [menu setMenuVisible:YES animated:YES];

 这里以UILabel为例,具体代码如下:

#import "CustomLabel.h"

@implementation CustomLabel

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

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

-(void)createAttributes{
    // 打开用户交互
    self.userInteractionEnabled = YES;
    // 添加手势
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelAction)];
    [self addGestureRecognizer:tap];
}

// 使label能成为第一响应者
- (BOOL)canBecomeFirstResponder{
    return YES;
}
// label能执行的方法比如(复制,粘贴...)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    
    if (action == @selector(copy:) || action == @selector(cut:) || action == @selector(paste:)) {
        return YES;
    }
    
    return NO;
}

-(void)copy:(UIMenuController *)menu{
    // 将粘贴板上的内容复制给自己
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    self.text = paste.string;
}

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

-(void)paste:(UIMenuController *)menu{
    // 将自己的文字复制到粘贴板上
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    paste.string = self.text;
}

//设置menuController的作用矩形框
-(void)labelAction{
    
    // label成为第一响应者
    [self becomeFirstResponder];
    // 显示menuController
    UIMenuController *menu = [UIMenuController sharedMenuController];
    //[menu setTargetRect:self.frame inView:self.superView];可以用下面代替
    //TargetRect:MenuController需要指向的矩形距离
    //TargetView:targetRect会以它的左上角为坐标原点
    [menu setTargetRect:self.bounds inView:self];
    [menu setMenuVisible:YES animated:YES];
        
}

@end

运行结果:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值