IOSiOS DeveloperiOS 开发

TableView全表截图以及分段分享

2016-07-08  本文已影响791人  eversterd

TableView 全表截图

APP中有一个类似于分析报告的页面,需要全部分享,包括超出屏幕之外的cell。直接截屏只能获得tableView的一部分。在网上找了几段代码,经过测试,下面的方法可以获取整个tableView的画面(这个tableview大约是屏幕长度的两倍,动态加载的tableview没有测试)。

-(UIImage *)getTableViewimage{
    UIImage* viewImage = nil;
    UITableView *scrollView = self.tableView;
    UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, scrollView.opaque, 0.0);
    {
        CGPoint savedContentOffset = scrollView.contentOffset;
        CGRect savedFrame = scrollView.frame;
        
        scrollView.contentOffset = CGPointZero;
        scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
        
        [scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
        viewImage = UIGraphicsGetImageFromCurrentImageContext();
        
        scrollView.contentOffset = savedContentOffset;
        scrollView.frame = savedFrame;
    }
    UIGraphicsEndImageContext();
    
    return viewImage;
}

TableView分段分享

产品提出tableView应该可以选择不同的section进行分享,逻辑上不复杂,隐藏不分享的section再截图即可。

@property (nonatomic) BOOL isSectionHidden0;

    -(void)setSubview{
        UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"分享" style:UIBarButtonItemStyleBordered target:self action:@selector(shareReport:)];
        [rightButton setTintColor:[UIColor whiteColor]];

        self.navigationItem.rightBarButtonItem = rightButton;
    }

    -(void)shareReport:(id)sender{
        
        [self.tableView setEditing:self.tableView.editing animated:YES];//tableView右滑出现选择按钮
        [self.tableView setEditing:!self.tableView.editing animated:YES];
        
        for (int i = 0; i < 4; i ++) {
            
            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:i];
            
            [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];//默认选择全部分享
           
        }
        
        
        if (self.tableView.editing)
            
            [self.navigationItem.rightBarButtonItem setTitle:@"确定"];//第一次点击后 ,按钮文字变为“确定”
        
        else
        {
            [self.tableView reloadData];//隐藏不分享的section
            [self reportAfterSelect];//通过友盟分享
            [self.navigationItem.rightBarButtonItem setTitle:@"分享"];//再次点击 ,通过友盟分享,按钮恢复为“确定”
        }
        
        
    }

    #pragma delegate of tableView

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
        if (section==0) {
            if (_isSectionHidden0) {
                return 0;
            }
            return 40;
        }
    }

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        if (indexPath.section==0) {
            if (_isSectionHidden0) {
                return 0;
            }
            return 80;
        }
        
    }

    -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

    {
        return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
        
    }

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        
        if (indexPath.section==0) {
            if (_isSectionHidden0==NO) {
                _isSectionHidden0=YES;//每次选择cell,切换状态
            }else{
                _isSectionHidden0=NO;
            }
        }
    }

    //取消一项

    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //  NSUInteger row = [indexPath row]
        if (indexPath.section==0) {
            if (_isSectionHidden0==NO) {
                _isSectionHidden0=YES;//每次选择cell,切换状态
            }else{
                _isSectionHidden0=NO;
            }
        }
    }

最后截图分享后发现第一个section的headerView位置与cell重叠,后来各种尝试,发现加上下面这句代码就能避免。

self.automaticallyAdjustsScrollViewInsets = NO;

后知后觉的认识到可能是截图时navigationBar隐藏后,cell进行了自适应而headerView没有。

上一篇 下一篇

猜你喜欢

热点阅读