ちょっとしたコードや設定などですが、忘れがちであらためて調べるのも面倒なので、忘備録的なものです。
順不同で、気づいたものから順にSwift4で使えるコードを載せていきます。
Swift-Tips
スワイプ時に削除以外にも動作を設定
テーブルビューの行を左スワイプした時に「削除」以外の複数の処理を選択できるようにする
下記は処理として以下を追加したもの。
・「メール」:メール送信 (MFMailComposeViewControllerDelegate追加)
・「エキスポート」:他のアプリにデータを渡す(UIDocumentInteractionControllerDelegate追加)
var documentInteraction:UIDocumentInteractionController? = nil
// スワイプ時に削除以外にも動作を設定
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let mailTitle:String = NSLocalizedString("Mail", tableName: "Message", comment: "メール")
let mail: UITableViewRowAction = UITableViewRowAction(style: .normal, title: mailTitle) { (action, index) -> Void in
self.exportByMail(indexPath.row)
}
mail.backgroundColor = NC_173_KAMENOZOKI
let exportTitle:String = NSLocalizedString("Export", tableName: "Message", comment: "エキスポート")
let export: UITableViewRowAction = UITableViewRowAction(style: .normal, title: exportTitle) { (action, index) -> Void in
self.exportEntry(indexPath.row)
}
export.backgroundColor = NC_186_SORA
let deleteTitle:String = NSLocalizedString("Delete", tableName: "Message", comment: "削除")
let delete: UITableViewRowAction = UITableViewRowAction(style: .normal, title: deleteTitle) { (action, index) -> Void in
self.removeConfirm(indexPath.row)
}
delete.backgroundColor = NC_014_KARAKURENAI
return [export, mail, delete]
}
func exportByMail(_ index:Int) {
if !MFMailComposeViewController.canSendMail() { // メール送信不可
print("Mail can't be send")
return
}
let csvString:String = appDl.entries[index].texts2CSV()
let mailVC = MFMailComposeViewController()
let toRecipients:[String] = [""] //Toのアドレス指定
mailVC.mailComposeDelegate = self
mailVC.setSubject("Repeat after YOU!: Data export(テキストデータエクスポート)")
mailVC.setToRecipients(toRecipients)
let mailMessage = "テキストデータをCSV形式で添付します。\nExport the data with csv format.\n \n -- Repeat after YOU! --"
mailVC.setMessageBody(mailMessage, isHTML: false)
mailVC.addAttachmentData(csvString.data(using: String.Encoding.shiftJIS, allowLossyConversion: false)!, mimeType: "text/csv", fileName: "Export_output.csv" )
self.present(mailVC, animated: true, completion:nil)
}
func exportEntry(_ index:Int) {
let csvString:String = appDl.entries[index].texts2CSV()
let tempPath = NSTemporaryDirectory() as String
let filePath = tempPath + "output.csv"
print(filePath)
print(csvString)
let tmpUrl = URL(fileURLWithPath: filePath)
do {
try csvString.write(to: tmpUrl, atomically: true, encoding: .shiftJIS)
} catch {
print("File write error:",filePath)
return
}
documentInteraction = UIDocumentInteractionController(url: tmpUrl)
documentInteraction!.delegate = self
documentInteraction!.uti = "public.text"
if !documentInteraction!.presentOpenInMenu(from: self.view.frame, in: self.view, animated: true) {
print("File send error")
// 送信できるアプリが見つからなかった時の処理
let alert = UIAlertController(
title: NSLocalizedString("Alert!", tableName: "Message",comment: "注意!"),
message: NSLocalizedString("send-fail-message", tableName: "Message",value: "Failed to send.", comment: "ファイルを送れるアプリが見つかりません"),
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
@objc func documentInteractionController(_ controller: UIDocumentInteractionController, willBeginSendingToApplication application: String?) {
print("Start file sending to ",application ?? "")
}
@objc func documentInteractionController(_ controller: UIDocumentInteractionController,
didEndSendingToApplication application: String?) {
print("Complete file sending to ",application ?? "")
}
最近のコメント
Android版もできました! に ひよこボタン子育て応援アプリの使い方!音は周囲に迷惑なのか?いのっち発案 │ ある主婦の徒然なるままに より