tableViewを使って、Windowsのエクスプローラのようなものをつくろうとしています。
あるフォルダの中身をtableViewで表示し、セルを選択したときに、選択したものがフォルダである場合は、選択したフォルダの中身を表示します。戻るボタンを押下すると、ひとつ前のフォルダに戻ります。
また、セルを長押ししたときに、セルを選択状態(背景色を変更など、視覚的にわかりやすい方法であればいいと思っています。)にし、削除ボタンを押下すると選択状態だったセルを削除します。
長押し時の処理で行き詰まったので、ご教授お願いします。
選択したセルのindexPathを取得することまではできたのですが、セル自体を変更する方法がわかりません。
以下、途中までのコードです。
import UIKit
class ViewController: UIViewController ,UITableViewDelegate , UITableViewDataSource,UIGestureRecognizerDelegate{
//テーブルビューインスタンス作成 var tableView :UITableView = UITableView() var button1 : UIButton = UIButton() var label1 : UILabel = UILabel(frame: CGRectMake(0, 260, 200, 20)) //テーブルに表示するセルの配列を準備 var items:[String] = [] var items_sub : [String] = [] //初回起動時のフォルダ準備 var defaultFolder = "/Users/xxx/Desktop/Folder1/" //戻るボタン押下時の戻り先path var folder_pre1 = "" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //テーブルビュー1の初期化 tableView.frame = CGRectMake(0, 50, 200, 200) tableView.delegate = self tableView.dataSource = self self.view.addSubview(tableView) tableView.tag = 1 getAllFile(defaultFolder) //戻るボタン1の初期化 button1.setTitle("Back", forState: .Normal) button1.frame = CGRectMake(200, 50, 50, 20) self.view.addSubview(button1) button1.addTarget(self, action: "onClickButton1:", forControlEvents: .TouchUpInside) //ラベル1の初期化 label1.text = defaultFolder self.view.addSubview(label1) label1.backgroundColor = UIColor.whiteColor() label1.font = UIFont.systemFontOfSize(8) //UILongPressGestureRecognizer(長押しイベント)宣言 var longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: "cellLongPressed:") longPressGestureRecognizer.delegate = self //tableviewにrecognizerを設定 tableView.addGestureRecognizer(longPressGestureRecognizer) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //セルの行数 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } //セルの内容を変更 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell : UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell") cell.textLabel?.text = items[indexPath.row] cell.detailTextLabel?.text = items_sub[indexPath.row] return cell } //セル選択時 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { var isDir = isDirectory(defaultFolder + items[indexPath.row]) if(isDir == true){ folder_pre1 = defaultFolder defaultFolder = defaultFolder + items[indexPath.row] + "/" label1.text = defaultFolder println(defaultFolder) println(folder_pre1) } else{ } getAllFile(defaultFolder) self.tableView.reloadData() } //セル長押し時 func cellLongPressed(sender : UILongPressGestureRecognizer){ //押された位置でcellのpathを取得 let point = sender.locationInView(tableView) let indexPath = tableView.indexPathForRowAtPoint(point) if sender.state == UIGestureRecognizerState.Began{ //セルが長押しされたときの処理 } else{ } } //button1押下時イベント func onClickButton1(sender:UIButton){ label1.text = folder_pre1 getAllFile(folder_pre1) defaultFolder = folder_pre1 self.tableView.reloadData() println(folder_pre1) //1つ上の階層のpathに更新 var endpoint = count(defaultFolder) - 1 var path = (defaultFolder as NSString).substringToIndex(endpoint) var position = (path as NSString).rangeOfString("/",options:NSStringCompareOptions.BackwardsSearch).location println(position) println((count(folder_pre1)).description) folder_pre1 = (defaultFolder as NSString).substringToIndex(position + 1) println(folder_pre1) } //指定したPathがフォルダかどうか func isDirectory(path : String) -> Bool{ var path = path var isDir :ObjCBool = false if NSFileManager.defaultManager().fileExistsAtPath(path, isDirectory: &isDir){ if isDir{ return true } else{ return false } } else{ return false } } //フォルダ1内のファイル一覧を取得 func getAllFile(folder : String){ let manager = NSFileManager.defaultManager() let defaultFolder = folder let list = manager.contentsOfDirectoryAtPath(defaultFolder, error: nil)! if(items.isEmpty == false){ items.removeAll() } for path in list{ items.append(path as! NSString as String) var fullPath = defaultFolder + (path as! String) let attribute : NSDictionary = manager.attributesOfItemAtPath(fullPath, error: nil)! let stringDate = changeToString(attribute.fileModificationDate()!) items_sub.append(stringDate + " / " + attribute.fileSize().description) } }
//NSDateをString型に変更
func changeToString(date : NSDate) -> String{
let date = date
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-DD HH:mm:ss"
let stringDate :String = formatter.stringFromDate(date) return stringDate }
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。