美文网首页
UIMenuController的使用 方法

UIMenuController的使用 方法

作者: guoguojianshu | 来源:发表于2021-04-21 21:24 被阅读0次
-(CGFloat)XSGetPicWide:(XSChatMessageModel*)model{
    ///图片
    CGSize imageSize = CGSizeMake([model.imgWidth floatValue], [model.imgHeight floatValue]);
    CGFloat maxWidth = SCREENWIDTHSU - 2*40*SCALESU - 2*16*SCALESU - 2*12*SCALESU;
    CGFloat maxHeight = SCREENHEIGHTSU / 4;

    CGFloat finalWidth = 0;
    CGFloat finalHeight = 0;
    if (imageSize.width >= maxWidth) {
        finalWidth = maxWidth;
        finalHeight =  finalWidth * imageSize.height/imageSize.width;

        if (finalHeight > maxHeight) {
            finalHeight = maxHeight;
            finalWidth = finalHeight * imageSize.width/imageSize.height;
        }
    }else if (imageSize.height >= maxHeight){
        finalHeight =  maxHeight;
        finalWidth = finalHeight * imageSize.width/imageSize.height;

        if (finalWidth > maxWidth) {
            finalWidth = maxWidth;
            finalHeight = finalWidth * imageSize.height/imageSize.width;
        }
    }else {
        finalWidth = imageSize.width;
        finalHeight = imageSize.height;
    }
    return finalWidth;
}
- (CGFloat)getLabelHeightWithText:(NSString *)text
                            width:(CGFloat)width
                             font:(UIFont *)font {
    CGRect rect = [text boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                     options:NSStringDrawingTruncatesLastVisibleLine| NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingUsesFontLeading
                                  attributes:@{NSFontAttributeName:font}
                                     context:nil];
    return rect.size.width;
}
-(void)XSLongPress:(UILongPressGestureRecognizer *)ges{
    if (ges.state == UIGestureRecognizerStateBegan) {
     NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint:[ges locationInView:self.tableView]];
        self.XSSelectRow = indexPath.row;
        if (indexPath == nil) return;
        if ([UIMenuController sharedMenuController].isMenuVisible) {
            [[UIMenuController sharedMenuController] setMenuVisible:NO animated:YES];
        }else{
            CGFloat x = 0;
            CGFloat y = 0;
           
            UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:indexPath];
            XSChatMessageModel * model = self.dataSource[indexPath.row];
            if ([model.type isEqualToString:@"4"]) {
//                礼物
                if ([model.cellType isEqualToString:@"left"]) {
//                    左侧的礼物
                    y = 12*XSWIDESCALE;
                    x = 163*XSWIDESCALE;
                }else if ([model.cellType isEqualToString:@"right"]){
//                    右侧的礼物
                    y = 12*XSWIDESCALE;
                    x = XS_WIDTH - 163*XSWIDESCALE;
                }
            }else if ([model.type isEqualToString:@"5"]){
//                直播间
                
            }else if ([model.type isEqualToString:@"2"]){
//图片
                if ([model.cellType isEqualToString:@"left"]) {
//                    左侧的图片
                    y = 32*XSWIDESCALE;
                    x = 68*XSWIDESCALE + [self XSGetPicWide:model]/2.0;
                }else if ([model.cellType isEqualToString:@"right"]){
//                    右侧的图片
                    y = 32*XSWIDESCALE;
                    x = XS_WIDTH - 68*XSWIDESCALE - [self XSGetPicWide:model]/2.0;
                }
                
            }else if ([model.type isEqualToString:@"1"]){
//                文字
                if ([model.cellType isEqualToString:@"left"]) {
//                    左侧的文字
                    y = 12*XSWIDESCALE;
                    
                  CGFloat wide = [self getLabelHeightWithText:model.content width:(SCREENWIDTHSU - SCALESU*(2*40 + 2*16 + 2*12 + 2*14)) font:PINGFANGSURegular(14*SCALESU)];
                    
                    x = 68*XSWIDESCALE + (wide + 28*XSWIDESCALE)/2.0;
                
                }else if ([model.cellType isEqualToString:@"right"]){
//                    右侧的文字
                    y = 12*XSWIDESCALE;
                    CGFloat wide = [self getLabelHeightWithText:model.content width:(SCREENWIDTHSU - SCALESU*(2*40 + 2*16 + 2*12 + 2*14)) font:PINGFANGSURegular(14*SCALESU)];
                    x = XS_WIDTH -68*XSWIDESCALE - (wide + 28*XSWIDESCALE)/2.0;
                }
            }
            UIMenuItem * deleteLink = [[UIMenuItem alloc]initWithTitle:@"删除" action:@selector(XSdelete:)];
//            [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects:deleteLink, nil]];
            [UIMenuController sharedMenuController].menuItems = @[deleteLink];
            [[UIMenuController sharedMenuController] setTargetRect:CGRectMake(x, y, 0, 0) inView:cell];

            [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];
        }
        
    }
}
//注意必须写这个方法,UIMenuController才会显示
-(BOOL)canBecomeFirstResponder{
    return YES;
}
//等待删除的请求
-(void)XSdelete:(UIMenuController *)menu{
//    XSChatMessageModel * model =  self.dataSource[self.XSSelectRow];
    [self.dataSource removeObjectAtIndex:self.XSSelectRow];
    [self.tableView reloadData];
    NSLog(@"删除");
}

!!!如果UIMenuController不显示,一定要注意有没有重新这句-(BOOL)canBecomeFirstResponder

//注意必须写这个方法,UIMenuController才会显示
-(BOOL)canBecomeFirstResponder{
    return YES;
}

相关文章

网友评论

      本文标题:UIMenuController的使用 方法

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