- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的很困惑如何导入 pdf 文件并将其存储在 TableView 单元格中。我正在使用 UIDocumentPicker 导入 pdf 文件,但我无法弄清楚如何将 pdf 文件数据存储到 TableView 单元格中。我的问题是,我创建了一个名为 insertNewFileTitle() 的函数,每次单击 addButtonTapped 函数时,该函数都会附加一个新的 TableView 单元格。我想确保 pdf 数据仍然位于我导入 pdf 文件的正确表格 View 单元格中。
我想做的是让表格 View 单元格存储导入的 pdf 文件,以便稍后在选择表格单元格时我可以将 pdf 文件作为邮件编辑器的附件发送。如有任何见解,我们将不胜感激,谢谢。
var pdfFiles: [String] = []
var myPDFsArray : Array<MyPDFs> = []
var selectedRow : NSInteger? // optional NSInteger
@available(iOS 8.0, *)
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
let myURL = url as URL
print("import result : \(myURL)")
do {
let data = try Data(contentsOf: myURL)
print("data=\(data)")
}
catch {/* error handling here */}
let pathString = myURL.path // String path for PDF
let PDFName = myURL.lastPathComponent // string for PDF Name
if controller.documentPickerMode == UIDocumentPickerMode.import {
DispatchQueue.main.async(){
self.myPDFsArray.append(MyPDFs(fileTitle: pathString, fileName: PDFName))
}
}
print (pathString)
print (PDFName)
}
@available(iOS 8.0, *)
public func documentMenu(_ documentMenu:UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) {
documentPicker.delegate = self
present(documentPicker, animated: true, completion: nil)
//self.present(documentPicker, animated: true, completion: nil)
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("we cancelled")
dismiss(animated: true, completion: nil)
}
func documentMenuWasCancelled(documentMenu: UIDocumentMenuViewController) {
print("menu got cancelled")
documentMenu.dismiss(animated: true, completion: nil)
}
@IBAction func addButtonTapped(_ sender: Any){
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
self.present(importMenu, animated: true, completion: nil)
//importMenu.addOption(withTitle: "Create New Document", image: nil, order: .first, handler: {print("New Doc Requested")})
insertNewFileTitle()
}
func insertNewFileTitle(){
if addFileTextField.text!.isEmpty {
print("Add Video Text Field is empty")
}
pdfFiles.append(addFileTextField.text!)
let indexPath = IndexPath(row: pdfFiles.count - 1, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: .automatic) //can customize
tableView.reloadData()//reload table
tableView.endUpdates()
addFileTextField.text = ""
view.endEditing(true)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pdfFiles.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let fileTitleCell = pdfFiles[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "FileCell") as! FileCell
cell.fileTitle.text = fileTitleCell
if myPDFsArray.contains(MyPDFs(fileTitle: "fileTitle", fileName: "fileName")){
cell.accessoryType = .checkmark
}
else{
cell.accessoryType = .none
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedRow = indexPath.row // indexPath.row is the value of the row you tap on, starting from first 0
tableView.deselectRow(at: indexPath, animated: true)
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
//selectedRow = indexPath.row // indexPath.row is the value of the row you tap on, starting from first 0
//if myPDFsArray.contains(MyPDFs(fileTitle: "fileTitle", fileName: "fileName")){
if cell.accessoryType == .checkmark{
cell.accessoryType = .none
//myPDFsArray.remove(at: MyPDFs.index(ofAccessibilityElement: NSObject.self))
//print(MyPDFs.init(fileTitle: "fileTitle", fileName: "fileName"))
print("")
print(myPDFsArray[indexPath.row].fileTitle!)
print("")
print(myPDFsArray[indexPath.row].fileName!)
}
else{
cell.accessoryType = .checkmark
selectedRow = indexPath.row
myPDFsArray.append(MyPDFs(fileTitle: "fileTitle", fileName: "fileName"))
//print(MyPDFs.init(fileTitle: "fileTitle", fileName: "fileName"))
print("")
print(myPDFsArray[selectedRow!].fileTitle!)
print("")
print(myPDFsArray[selectedRow!].fileName!)
}
//}
}
}
下一部分是我发送电子邮件的按钮操作
@IBAction func sendEmail(_sender: Any) {
let subject = "subject"
let messageBody = "pdf file names"
lblValidationMessage.isHidden = true
let allPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = allPaths.first!
let myPath = "/(MyPDFs[selectedRow].fileName)" //is it a forward slash or backslash?
let pathForFile = documentsDirectory.appending(myPath)
print("")
print(pathForFile)
print("")
guard let email = emailNew.text, emailNew.text?.characters.count != 0 else {
lblValidationMessage.isHidden = false
lblValidationMessage.text = "Please enter your email"
return
}
if isValidEmail(emailNew: email) == false {
lblValidationMessage.isHidden = false
lblValidationMessage.text = "Please enter a valid email address"
return
}
if( MFMailComposeViewController.canSendMail() ) {
print("Can send email.")
let mailComposer = MFMailComposeViewController()
mailComposer.mailComposeDelegate = self
//Set the subject and message of the email
mailComposer.setToRecipients([email])
mailComposer.setSubject(subject)
mailComposer.setMessageBody(messageBody, isHTML: false)
// Add attachment
if let fileData = NSData(contentsOfFile: pathForFile) {
print("file data loaded")
mailComposer.addAttachmentData(fileData as Data, mimeType: "application/pdf", fileName: "fileName")
}
//this will compose and present mail to user"
self.present(mailComposer, animated: true, completion: nil)
}
else {
self.showSendMailErrorAlert()
}
}
最佳答案
我不确定我是否正确理解了这一点。为什么需要将 PDF 存储在 UITableView 单元格内?
为什么不直接创建一个这样的模型:
class MyPDFs : NSObject
{
var fileTitle : String?
var fileName : String?
override init(){}
convenience init(fileTitle : String , fileName : String)
{
self.init()
self.fileTitle = fileTitle
self.fileName = fileName
}
}
每次点击 addButton 时,都会创建一个新对象,将其附加到 MyPDFs 类型的数组中,然后重新加载表格。
var myPDFsArray : Array<MyPDFs> = []
myPDFsArray.append(MyPDFsObject)
myUITableView.reloadData()
这样,当您使用indexPath.row选择UITableView单元格时,您就可以获取PDF属性,并且可以获得要附加到MailComposer的名称和文件路径。
关于ios - 如何使用 UIDocumentPicker 将 pdf 文件导入 TableView 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49850460/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!