UIMenuController简单使用

2017-09-08  本文已影响45人  Coder007

UIMenuController

需要自己添加的控件,比如说Label

系统自带的一些操作
/** 让label有资格成为第一响应者*/
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

/**
 * label能执行哪些操作(比如copy, paste等等)
 * @return  YES:支持这种操作
 */
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    // 想要的操作返回YES就行,具体有什么操作,可以打印action看,然后实现相应的方法就行
    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) return YES;
    
    return NO;
}

// 在需要显示的时候调用以下代码
// label要成为第一响应者,UIMenuController的显示依赖第一响应者
// 第一响应者变化的时候,UIMenuController会自动消失
[self becomeFirstResponder];
// 创建MenuController,是个单例
UIMenuController *menu = [UIMenuController sharedMenuController];
// targetRect: UIMenuController需要指向的矩形框
// targetView: targetRect会以targetView的左上角为坐标原点
// 下面两种方式效果相同
// rect填写自己的bounds,那么view就要写self,自己
// rect填写自己的frame,那么View就要写自己的父控件
[menu setTargetRect:self.bounds inView:self];
// [menu setTargetRect:self.frame inView:self.superview];
[menu setMenuVisible:YES animated:YES];
可以自定义一些操作
    // 添加MenuItem
    UIMenuItem *share = [[UIMenuItem alloc] initWithTitle:@"分享" action:@selector(share:)];
    UIMenuItem *support = [[UIMenuItem alloc] initWithTitle:@"点赞" action:@selector(support:)];
    UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:@"举报" action:@selector(report:)];
    menu.menuItems = @[share, support, report];
    
// 这个方法中需要返回NO,屏蔽系统自带的事件
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return NO;
}
上一篇 下一篇

猜你喜欢

热点阅读