#質問したいこと
swift5 でメモアプリを作成中です。cellをタップすると詳細画面へ行きたいのですが、なぜか2回画面遷移します。どうすれば治りますか?
#コード
swift
1//詳細画面へ 2import UIKit 3 4class DetailViewController: UIViewController { 5 6 @IBOutlet weak var memoTextView: UITextView! 7 8 var selectedRow:Int! 9 var selectedMemo : String! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 memoTextView.text = selectedMemo 14 let kbToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 40)) 15 kbToolBar.barStyle = UIBarStyle.default // スタイルを設定 16 kbToolBar.sizeToFit() // 画面幅に合わせてサイズを変更 17 // スペーサー 18 let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil) 19 // 閉じるボタン 20 let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(self.commitButtonTapped)) 21 kbToolBar.items = [spacer, commitButton] 22 memoTextView.inputAccessoryView = kbToolBar 23 } 24 25 @objc func commitButtonTapped() { 26 self.view.endEditing(true) 27 } 28 29 @IBAction func deleteMemo(_ sender: Any) { 30 let ud = UserDefaults.standard 31 if ud.array(forKey: "memoArray") != nil{ 32 var saveMemoArray = ud.array(forKey: "memoArray") as![String] 33 saveMemoArray.remove(at: selectedRow) 34 ud.set(saveMemoArray, forKey: "memoArray" ) 35 ud.synchronize() 36 //画面遷移 37 38// self.navigationController?.popViewController(animated: true) 39 } 40 } 41 42} 43
swift
1//ホーム画面 2import UIKit 3 4class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 5 6 @IBOutlet weak var memoTableView: UITableView! 7 8 var memoArray = [String]() 9 10 let ud = UserDefaults.standard 11 12 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 13 return memoArray.count 14 } 15 16 17 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 18 let cell = tableView.dequeueReusableCell(withIdentifier: "memoCell", for: indexPath) 19 cell.textLabel?.text = memoArray[indexPath.row] 20 return cell 21 } 22 23 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 24 self.performSegue(withIdentifier: "toDetail", sender: nil) 25 //押したら押した状態を解除 26 tableView.deselectRow(at: indexPath, animated: true) 27 } 28 29 30 override func viewDidLoad() { 31 super.viewDidLoad() 32 33 memoTableView.delegate = self 34 memoTableView.dataSource = self 35 } 36 override func viewWillAppear(_ animated: Bool) { 37 loadMemo() 38 } 39 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 40 //destinationのクラッシュ防ぐ 41 if segue.identifier == "toDetail"{ 42 //detailViewControllerを取得 43 //as! DetailViewControllerでダウンキャストしている 44 let detailViewController = segue.destination as! DetailViewController 45 //遷移前に選ばれているCellが取得できる 46 let selectedIndexPath = memoTableView.indexPathForSelectedRow! 47 detailViewController.selectedMemo = memoArray[selectedIndexPath.row] 48 detailViewController.selectedRow = selectedIndexPath.row 49 } 50 } 51 func loadMemo(){ 52 if ud.array(forKey: "memoArray") != nil{ 53 //取得 またas!でアンラップしているのでnilじゃない時のみ 54 memoArray = ud.array(forKey: "memoArray") as![String] 55 //reloadしてくれる 56 memoTableView.reloadData() 57 } 58 } 59 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 60 61 if editingStyle == .delete { 62 63 //resultArray内のindexPathのrow番目をremove(消去)する 64 memoArray.remove(at: indexPath.row) 65 66 //再びアプリ内に消去した配列を保存 67 ud.set(memoArray, forKey: "memoArray") 68 69 //tableViewを更新 70 tableView.reloadData() 71 } 72 } 73} 74
こちらのサイトを参考にさせていただきました。
#画像
![一覧(viewController)
少し急いでいます。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/21 22:05