美文网首页
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的基本使用

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