UIMenuController

原创 2015年11月02日 20:43:39

参考文章:

使用UIMenuController可以方便的在app中展示copy/paste菜单,也可以自定义。
在使用UIMenuController的时候,会用到UIResponder的一些方法。

  • – canBecomeFirstResponder
  • – canPerformAction:withSender:

代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *tapGesture =
      [[UITapGestureRecognizer alloc] initWithTarget:self
                                              action:@selector(handleTapGesture:)];
    [self.view addGestureRecognizer:tapGesture];
}


- (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture {
    NSLog(@"tapGesture:");
//    CGRect targetRectangle = self.tapView.frame;
    CGRect targetRectangle = CGRectMake(100, 100, 100, 100);
    [[UIMenuController sharedMenuController] setTargetRect:targetRectangle
                                                    inView:self.view];

    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Custom Action"
                                                  action:@selector(customAction:)];

    [[UIMenuController sharedMenuController]
     setMenuItems:@[menuItem]];
    [[UIMenuController sharedMenuController]
     setMenuVisible:YES animated:YES];

}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (BOOL)canPerformAction:(SEL)action
              withSender:(id)sender
{
    BOOL result = NO;
    if(@selector(copy:) == action ||
       @selector(customAction:) == action) {
        result = YES;
    }
    return result;
}

// UIMenuController Methods

// Default copy method
- (void)copy:(id)sender {
    NSLog(@"Copy");
}

// Our custom method
- (void)customAction:(id)sender {
    NSLog(@"Custom Action");
}

这里写图片描述

在UITableView或者UICollectionView中,还需要一些额外的方法。

UITableViewDelegate方法
复制和粘贴行内容

  • – tableView:shouldShowMenuForRowAtIndexPath:
  • – tableView:canPerformAction:forRowAtIndexPath:withSender:
  • – tableView:performAction:forRowAtIndexPath:withSender:

UICollectionViewDelegate方法

  • – collectionView:shouldShowMenuForItemAtIndexPath:
  • – collectionView:canPerformAction:forItemAtIndexPath:withSender:
  • – collectionView:performAction:forItemAtIndexPath:withSender:

UIMenuController仅仅只能显示在key window上。在使用其他的library或者framework的时候,可能会遇到一些问题。可以在viewDidAppear: 中调用如下的代码来修复:

[self.view.window makeKeyWindow];

资源:

UILabel

版权声明:本文为博主原创文章,未经博主允许不得转载。

UIMenuController和NSAttributedString

  • 2016年01月27日 15:23
  • 42KB
  • 下载

使用UIMenuController 长安文字复制

  • 2015年11月20日 10:21
  • 57KB
  • 下载

UIMenuController 实现过程,以及不为人知的一些坑

前段时间公司项目需要做单元格中UILabel 内容的复制功能,用系统原有的UIMenuController可以轻松实现,但是在使用过程中,却出现了一个坑,苦苦搜索,baidu、stackoverflo...

UIMenuController使用

当苹果在 iOS 3.0 中增加了剪切、复制和粘贴功能时,它同时为开发者提供了 UIMenuController 组件用来定制该弹出菜单,但不幸的是,最开始的实现要很麻烦: 附加在菜单的视图...

UIMenuController的使用

1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES 2. Menu所处的View必须实现 – (BOOL)canPerformActi...

iOS UI: UIMenuController | InputView 折腾记

本来 UIMenuController 这个东西挺简单的. 直到… 遇到 InputView, 我就醉了, 程序也崩溃了.这里以 Demo 为主, 来说明问题.实现的效果很简单, 如下图ViewC...

iOS UIMenuController的使用

当你在开发app过程中,突然想往一个控件或者UITableView里面添加一个长按手势,弹出一个黑色的选择菜单时,这时候就需要使用UIMenuController了...

UIMenuController的使用简介

UIMenuController苹果官方文档 示例代码下载地址 1. UIMenuController简介 在很多应用中,当我们长按一段文字或者图片的时候会弹出一个菜单,我们通过这个菜单可以实现...

Swift UIMenuController中的坑

由于自己喜欢看段子,最近做了一个看段子的APP。主要是因为 网易新闻 和 今日头条 分享段子的姿势恕我不能忍。 完成后的效果 2017-02-21 16_00_55.gif ...

对UILabel添加UIMenuController扩展

一、UIMenuController认识 1、默认情况下,UITextView / UITextFiled / UIWebView 都有苹果自带的有UIMenuController功能二、对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIMenuController
举报原因:
原因补充:

(最多只允许输入30个字)