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

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

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

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

Q&A

解決済

1回答

845閲覧

swift:遷移先のTableViewのセルをタップした時にそのセルに文字を表示したい

takk_014

総合スコア53

Swift

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

0グッド

0クリップ

投稿2020/05/04 05:36

遷移先のTableViewのセルをタップした時にそのセルに文字を表示したいのですがシミュレーションを立ち上げてタップしても何も反応がないです。
下の画像がStoryBoradです。
イメージ説明
以下コードです。

swift

1import UIKit 2import Foundation 3import UserNotifications 4 5class ViewController: UIViewController,UITableViewDelegate, UITableViewDataSource{ 6 7 8 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 9 return 0 10 } 11 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 12 let cell = tableView.dequeueReusableCell(withIdentifier: "mycell") 13 cell?.textLabel?.text = "test" 14 return cell! 15 } 16 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 17 print("selected row", indexPath.row) 18 let cell = tableView.dequeueReusableCell(withIdentifier: "mycell") 19 switch indexPath.row { 20 case 0: 21 print("一行目です") 22 cell?.textLabel!.text = "test" 23 break 24 case 1: 25 print("二行目です") 26 break 27 default : 28 print("selected default") 29 break 30 } 31 } 32 33 34 var alertController: UIAlertController! 35 func alert(title:String, message:String) { 36 alertController = UIAlertController(title: title,message:message,preferredStyle: .alert) 37 alertController.addAction(UIAlertAction(title: "OK",style:.default,handler: nil)) 38 present(alertController, animated: true) 39 } 40 41 @IBOutlet weak var mybutton: UIButton! 42 //監視ボタンの処理 43 func htmlprint(URLstr: UITextField!,Findstr: UITextField!){ 44 //処理中なら止めて中止 45 if(mybutton.backgroundColor == UIColor.red){ 46 global_Stop = true 47 mybutton.backgroundColor = UIColor.green 48 mybutton.setTitle("監視開始", for:UIControl.State.normal) 49 return; 50 } 51 global_Stop = false 52 53 //バックグラウンド処理への値渡し用変数 54 global_URL = URLstr.text! 55 global_STR = Findstr.text! 56 global_TIME = Int(CheckTime.text!)! 57 alert(title:"HtmlWatcher",message:"監視を開始します。\nホームに戻ってこのアプリをバックグラウンドにしてください!") 58 59 mybutton.backgroundColor = UIColor.red 60 mybutton.setTitle("監視中", for:UIControl.State.normal) 61 } 62 63 @IBOutlet weak var URLtext: UITextField! 64 @IBOutlet weak var FindString: UITextField! 65 @IBOutlet weak var CheckTime: UITextField! 66 67 var timer: Timer? 68 var count: Int = 0 69 @IBAction func GetSource(_ sender: Any) { 70 if URLtext.text == "" || FindString.text == ""{ 71 alert(title:"HtmlWatcher",message:"入力してください") 72 } 73 else{ 74 self.htmlprint(URLstr: self.URLtext,Findstr: self.FindString); 75 } 76 } 77 78 override func viewDidLoad() { 79 super.viewDidLoad(); 80 self.CheckTime.keyboardType = UIKeyboardType.numberPad 81 } 82 83 //キーボード入力を終了した時キーボードを閉じる 84 @IBAction func URLEditEnd(_ sender: Any) { 85 URLtext.text = (sender as AnyObject).text 86 } 87 @IBAction func FindStringEditEnd(_ sender: Any) { 88 FindString.text = (sender as AnyObject).text 89 } 90 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 91 self.view.endEditing(true) 92 } 93 94} 95

参考にしたサイトによると下の画像のようにdatasourceとdelegateをViewContollerアイコンに繋げないといけないようなのでdatasourceとdelegateを遷移先のViewContollerアイコンに繋げたところ遷移時にエラーが出てしまいます。
イメージ説明

errorMessage

1Thread 1: signal SIGABRT

かといって何も繋げなければタップしても反応がないです。
どうすれば遷移先のTableViewのセルをタップした時にそのセルに文字を表示することができるでしょうか?
どうかご教授お願い致します。

環境:Xcode11,iOS13

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

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

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

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

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

guest

回答1

0

ベストアンサー

遷移元のクラスに tableViewdataSourcedelegate を置くことは可能ですが、その場合はドラッグで設定することはできないので、コードベースで記述する必要があります。

遷移先の UIViewController のカスタムクラスに UITableView へのアウトレットを置いた上(tableViewと接続した上)、

swift

1class SecondViewController: UIViewController { 2 @IBOutlet weak var tableView: UITableView! 3 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 tableView.delegate = presentingViewController as? ViewController 7 tableView.dataSource = presentingViewController as? ViewController 8 } 9 // 以下必要な処理 10}

といった感じで delegatedataSoure を設定すれば表示することは可能です(ただし、これは質問者さんの設定を推測した上でやったことなので、条件次第では実行できないこともあります)。

ただ、tableView に関する処理は、tableView を実際に処理する遷移先のクラスに任せてしまうのが(特に最初のうちは)いいかと思います。

投稿2020/05/04 07:33

TsukubaDepot

総合スコア5086

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

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

takk_014

2020/05/05 01:54

ご教授ありがとうございます。 おかげ様でTableViewのセルに文字を表示することができました! swiftを触れたばかりなためコードベースで記述する方法があるとは知りませんでした。 また機会があればよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問