QLPreviewController 顯示文件

import <QuickLook/QuickLook.h>

QLPreviewControllerDelegate,QLPreviewControllerDataSource

  • (void)addQLPreviewVC {
    QLPreviewController *QLPreviewVC = [[QLPreviewController alloc] init];
    QLPreviewVC.view.frame = self.view.bounds;
    QLPreviewVC.dataSource = self;
    QLPreviewVC.delegate = self;
    if([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
    [self addChildViewController:QLPreviewVC];

      QLPreviewVC.currentPreviewItemIndex = 0;
    

    }
    [self.view addSubview:QLPreviewVC.view];
    }

  • (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
    }

  • (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
    //根據(jù)文件名判斷文件類型
    NSRange pointRange = [self.fileName rangeOfString:@"."];
    NSString *subName;
    if (pointRange.location>0 && pointRange.location < self.fileName.length-2) {
    subName = [self.fileName substringFromIndex:pointRange.location+1];
    }
    if (subName.length > 3 && [subName containsString:@"#"]) {
    subName = [subName substringToIndex:3];
    }
    if ([subName isEqualToString:@"txt"]&&[[UIDevice currentDevice].systemVersion floatValue] < 9.0) {

      //使用QLPreviewController展示TXT等文檔時,Windows下生成的UTF-8格式的文件會出現(xiàn)中文(以及其他特殊字符)亂碼的問題。QLPreviewController只有在UTF16的編碼下才能正確顯示中文,需要在展示文件之前將文件的編碼改為UTF16
      //需針對ANSI編碼和Unicode編碼分別進行解碼
      
      //處理txt格式內容顯示有亂碼的情況
      NSData *fileData = [NSData dataWithContentsOfFile:self.filePath];
      
      //判斷編碼如果已經(jīng)是NSUTF16StringEncoding編碼,則isUNICODE與isANSI為空。
      //判斷是UNICODE編碼
      NSString *isUNICODE = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
      //還是ANSI編碼(-2147483623,-2147482591,-2147482062,-2147481296)encoding 任選一個就可以了。
      NSString *isANSI = [[NSString alloc] initWithData:fileData encoding:-2147483623];
      if (isUNICODE) {
          NSString *retStr = [[NSString alloc]initWithCString:[isUNICODE UTF8String] encoding:NSUTF8StringEncoding];
          NSData *data = [retStr dataUsingEncoding:NSUTF16StringEncoding];
          [data writeToFile:self.filePath atomically:YES];
      }
      else if(isANSI){
          NSData *data = [isANSI dataUsingEncoding:NSUTF16StringEncoding];
          [data writeToFile:self.filePath atomically:YES];
      }
    

    }

    return [NSURL fileURLWithPath:self.filePath];
    }

/*

  • 這個方法可不實現(xiàn)
    */
  • (void)previewControllerWillDismiss:(QLPreviewController *)controller {
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容