質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3379閲覧

[swift 5]なぜか2回画面遷移をしてしまう。

Kaguya_4869

総合スコア116

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/11/21 13:09

#質問したいこと
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)
詳細画面(detaiViewController)
いらない画面
メインストーリーボード

少し急いでいます。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしかして、、、

https://teratail.com/questions/224322#reply-328575

これを確認してみてください。

投稿2019/11/21 13:27

hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kaguya_4869

2019/11/21 22:05

できました!本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問