关闭

UIMenuController

标签: menucopypaste
712人阅读 评论(0) 收藏 举报
分类:

参考文章:

使用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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:254022次
    • 积分:5557
    • 等级:
    • 排名:第4771名
    • 原创:224篇
    • 转载:81篇
    • 译文:21篇
    • 评论:10条
    最新评论