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

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

相关文章推荐

iOS-你真的会用UIMenuController吗?(详细)

iOS-你真的会用UIMenuController吗?(详细)

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...

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

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

UIMenuController使用

iOS的APP中经常有这样的需求,长按某个地方(最多的是tableview的cell,例如聊天界面的某条消息),弹出一个黑色的横向菜单,如图: 这个控件就是系统自带的UIMenuControll...

UIMenuController的使用,对UILabel拷贝以及定制菜单

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

关于UIMenuController的使用 弹出菜单UIMenuItem

关于UIMenuController的使用 弹出菜单UIMenuItem  (2013-07-29 11:10:25) 转载▼ 为了寻找UIMenuItem找到一个别人的博客   里边东西很多:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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