UIMenuController

来源:互联网 发布:fiddler拦截修改数据 编辑:程序博客网 时间:2024/05/18 02:50

UIMenuController的使用,对UILabel拷贝以及定制菜单,需要完成以下几个步骤

  1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES
  2. Menu所处的View必须实现 – (BOOL)canPerformAction:withSender, 并根据需求返回YES或NO
  3. 使Menu所处的View成为First Responder (becomeFirstResponder)
  4. 定位Menu (- setTargetRect:inView:)
  5. 展示Menu (- setMenuVisible:animated:)

例如:

  • (1). 在定义MYLabel继承UILabel
#import "MYLabel.h"@implementation MYLabel//使其可以成为第一响应 默认为NO- (BOOL)canBecomeFirstResponder{    return YES;}//绑定事件- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        [self attachTapHandler];    }    return self;}//UILabel默认是不接收事件的,我们需要自己添加touch事件-(void)attachTapHandler{    self.userInteractionEnabled = YES;  //用户交互的总开关    UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];    touch.numberOfTapsRequired = 2;    [self addGestureRecognizer:touch];}//"反馈"关心的功能-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{    return ( action == @selector(paste:)||action == @selector(copy:)||action == @selector(weiboShare:)||action == @selector(mailShare:));}//针对于copy的实现-(void)copy:(id)sender{    UIPasteboard *pboard = [UIPasteboard generalPasteboard];pboard.string = self.text;    NSLog(@"%@",pboard.string);}//针对于复制的实现- (void)paste:(id)sender{    UIPasteboard *pboard = [UIPasteboard generalPasteboard];    self.text = pboard.string;}- (void)mailShare:(UIMenuItem *)item{    NSLog(@"邮件分享");}- (void)weiboShare:(UIMenuItem *)item{    NSLog(@"微博分享");}//双击手势-(void)handleTap:(UIGestureRecognizer*) recognizer{    [self becomeFirstResponder];    UIMenuController *menu = [UIMenuController sharedMenuController];    UIMenuItem* mailShare = [[UIMenuItem alloc]initWithTitle:@"邮件分享" action:@selector(mailShare:)];    UIMenuItem* weiboShare = [[UIMenuItem alloc]initWithTitle:@"微博分享" action:@selector(weiboShare:)];    [menu setMenuItems:[NSArray arrayWithObjects:mailShare,weiboShare, nil]];    [menu setTargetRect:self.frame inView:self.superview];    [menu setTargetRect:self.frame inView:self.superview];    [menu setMenuVisible:YES animated:YES];}@end
  • (2). 初始化MYLabel
view = [[MYLabel alloc]initWithFrame:CGRectMake(0, 100, 320, 40)];view.text = @"11111";view.backgroundColor = [UIColor redColor];[self.view addSubview:view];
0 0
原创粉丝点击