美文网首页
iOS-UIMenuController的基本使用

iOS-UIMenuController的基本使用

作者: 巨人永不倒 | 来源:发表于2015-12-17 15:29 被阅读1034次

前言

  • 在使用iPhone时,长按文本视图或编辑框会出现复制粘贴视图,在iOS中该视图叫做UIMenuController,最近项目中需要自定义复制和删除操作,就了解了一些UIMenuController基本的使用方法.

UIMenuController基本使用

  • 在显示UIMenuController的时候,被显示视图 canBecomeFirstResponser方法返回值必须为Yes,该方法是UIView的方法,而继承与View的Lable和Cell默认返回值是NO,所以要重写该方法,并始终返回YES.
-(BOOL)canBecomeFirstResponder{
    return YES;
}
  • 1.Cell和Lable我们用手势来绑定方法,并自定义UIMenuController要显示的内容.
// 添加长按手势
 UILongPressGestureRecognizer * longPress=[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellLongPress:)];
 [cell addGestureRecognizer:longPress];
  • 2.当触发手势方法的时候,要把视图加入响应者链条,才能完整的响应整个事件,UIMenuController才能显示出来,首先获取响应手势的视图,再调用becomeFirstResponder方法,并且手势方法有各种状态,所以方法的调用是多次的,为了只执行一次,一般加上判断条件.
-(void)cellLongPress:(UIGestureRecognizer *)recognizer{ 
if (recognizer.state==UIGestureRecognizerStateBegan )   
MessageCell * messageCell=(MessageCell *)recognizer.view;  
[messageCell becomeFirstResponder];
}
  • 3.显示UIMenuController时,最重要就是显示的块内容,因此先拼装块内容UIMenuItem,以下初始化两个Item,并绑定自定义方法.
UIMenuItem * copyItem=[[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(myCopy:)];
UIMenuItem * deleateItem=[[UIMenuItem alloc] initWithTitle:@"删除" action:@selector(myDeleate:)];
  • 4.最后就是获取UIMenuController单利,把Item塞进去,并显示出来,最后要注意设置显示位置,传入的Rect要和view是在同一参照坐标系中.
//   获取UIMenuController单例
UIMenuController * menuControl=[UIMenuController sharedMenuController];
//   塞进UIMenuController中
[menuControl setMenuItems:[NSArray arrayWithObjects:copyItem,deleateItem ,nil]];
//   设置要显示的位置
[menuControl setTargetRect:CGRectMake(messageCell.contentBtn.frame.origin.x, messageCell.contentBtn.frame.origin.y, messageCell.contentBtn.frame.size.width, messageCell.contentBtn.frame.size.height) inView:messageCell];
//   显示出来
 [menuControl setMenuVisible:YES animated:YES];
  • 5.最后就是两个自定义的item方法.
-(void)myCopy:(id)sender
{
//获取粘贴板单例并把Cell中的文本值赋入
    [[UIPasteboard generalPasteboard] setString:self.currentSelectMessgaeCell.contentBtn.currentTitle];
}
-(void)myDeleate:(id)sender
{
//    删除环信某一条聊天(项目中用到环信聊天)
    NSString * messageID=self.currentSelectMessgaeCell.messageFrame.message.messageId;
    if ([self.conversation removeMessageWithId:messageID]) {
//    根据Cell定位Cell的位置
        NSIndexPath * path = [self.tableView indexPathForCell:self.currentSelectMessgaeCell];
//    根据位置删除内存数据
        [self.tableDataSource removeObjectAtIndex:path.row];
//    再删除对应位置的Cell
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationRight];
    }
}

UIMenuController的使用并不难,苹果已经封装好了一些原子化操作,只需要我们拼装起来就行了

相关文章

  • iOS-UIMenuController的基本使用

    前言 在使用iPhone时,长按文本视图或编辑框会出现复制粘贴视图,在iOS中该视图叫做UIMenuControl...

  • iOS-UIMenuController的使用

    第一次使用UIMenuController,遇见一些问题,记录如下。 概念 UIMenuController即菜单...

  • iOS-UIMenuController搭配UIPasteboa

    基本概念 UIKit框架中,可以直接执行拷贝黏贴操作的有 : UITextView、UITextField和UIW...

  • 基本的使用

    存cookie 取cookie 存session 取session

  • Flutter--Text/Container/Image

    Text基本使用 Container基本使用 Image基本使用

  • 基本使用

    1、 打开需要上传的文件夹执行: git init 格式化窗口 2、执行 git add . 上传文件 3、执行 ...

  • 基本使用

    href="javascript:;" 其中javascript: 是一个伪协议。它可以让我们通过一个链接来调用...

  • 基本使用

    数据库: 什么是数据库?简单来说就是存数据的。 都有什么是数据库? oracle(强大,跟金融政府打交道的,安全,...

  • 基本使用

    本文参考:https://morvanzhou.github.io/tutorials/machine-learn...

  • SQL语句基本使用

    SQL语句基本使用——增删改查 SQL语句基本使用——WHERE子句 SQL语句基本使用——AND和OR的使用 S...

网友评论

      本文标题:iOS-UIMenuController的基本使用

      本文链接:https://www.haomeiwen.com/subject/hflphttx.html