##cell内にあるボタンを押すと遷移先にあるテキストに遷移元のテキスト反映する方法を探しています。
######Swift初心者です。
######ボタンを押した時だけ、画面遷移を行いtableviewのテキストを遷移先のテキストに反映させたいです。今現状は、下でかいたテキストは反映されるのですが、選択したtableviewcell内のテキストをどう取得するかがわかりません。
import UIKit import RealmSwift class baseViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate{ @IBOutlet weak var baseTableView: UITableView! // 遷移先のViewControllerに渡す変数 var giveWord: String = "" var giveMeaning: String = "" var wordmeanings: [[String:String]] = [[:]] var doushi: [[String:String]] = [[:]] var meishi: [[String:String]] = [[:]] let koukoudoushi = [["abandon": "捨てる","abolish": "廃止する","absorb" : "吸収する","accelerate": "促進する"],["ban":"禁止する,kinnshisuru,banする"]] let koukoumeishi = [["abuse": "虐待", "access": "利用する権利", "accord": "一致/合意","acquaintance": "知人"]] override func viewDidLoad() { super.viewDidLoad() baseTableView.delegate = self baseTableView.dataSource = self doushi = koukoudoushi meishi = koukoumeishi // データの数(=セルの数)を返すメソッド func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return wordmeanings[section].keys.count } // 各セルの内容を返すメソッド func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // 再利用可能な cell を得る let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) doushi = koukoudoushi meishi = koukoumeishi let base1 = cell.viewWithTag(1) as! UILabel//英単語のlable base1.text = Array(wordmeanings[indexPath.section].keys)[indexPath.row] let base2 = cell.viewWithTag(2) as! UILabel//単語の意味のlabel base2.text = Array(wordmeanings[indexPath.section].values)[indexPath.row] base2.lineBreakMode = .byCharWrapping//意味ラベルの改行の種類 base2.numberOfLines = 5//改行の行数 return cell } @IBAction func toMyListButton(_ sender: Any) { if giveWord == ""{ giveWord = "選択されたテキストの値を取得できるようにする" giveMeaning = "選択されたテキストの値を取得できるようにする" } else{** giveWord = "選択されたテキストの値を取得できるようにする" giveMeaning = "選択されたテキストの値を取得できるようにする" } } // segue で画面遷移する時に呼ばれる override func prepare(for segue: UIStoryboardSegue, sender: Any?){ let inputViewController:InputViewController = segue.destination as! InputViewController if segue.identifier == "toMyListSegue"{ let list = List() let allLists = realm.objects(List.self) if allLists.count != 0 { list.id = allLists.max(ofProperty: "id")! + 1 let toMyList = segue.destination as! InputViewController toMyList.receiveWord = giveWord toMyList.receiveMeaning = giveMeaning } inputViewController.list = list } } }
>ボタンを押した時だけ、画面遷移を行いtableviewのテキストを遷移先のテキストに反映させたいです。今現状は、下でかいたテキストは反映されるのですが、選択したtableviewcell内のテキストをどう取得するかがわかりません。
という部分がよくわからないのですが、正確にはどのように実現したいのでしょうか。
1) ボタンを押した時だけ、画面遷移を行いtableviewのテキストを遷移先のテキストに反映させたいです。
この「ボタン」というのは、どこに配置されているボタンのことなのでしょうか。TableView と違う場所なのか、それとも TableView なのかによって解釈が異なってくる。
2) 今現状は、下でかいたテキストは反映されるのですが、
これは、どこにどの様に反映されているのでしょうか。
3) 選択したtableviewcell内のテキストをどう取得するかがわかりません。
「選択」という動作はどの様にして実現しているのでしょうか。コードから推測する限り、TableView Cell から直接 Segue を引っ張ってきているように推測されるのですが、そのあたりはどのようになっているのでしょうか。
また、全体を通してご質問に関係のあるコード、無いコードが混在していてより一層わかりにくくなっています。
performSegue の中で Realm からオブジェクトを取り出す処理が入っていますが、これは今回の処理とは関係があるのでしょうか(登録している場所がないため、今回の問題とは関係ないように思えますが)。
getCellというプロパティ(変数)も定義されないまま突然現れていて、どのような意図で使われているのか掴みかねています(これは無視してもあまり関係なさそうですが)。
第三者にもわかるよう、丁寧な説明をお願いできますでしょうか(ご質問を直接編集されて構いません)。
自分なりにコードを編集してみたのですが、かえって分かりにくくなってしまいました、すみません。
現状ですが、tableviewnocell内に英単語とその意味を表示するラベルと画面遷移を行うボタンを配置しています。cell内のボタンを押すと、遷移と同時に同じcellにある2つのラベルのテキストの値を遷移先のテキストに渡したいと思っています。
ボタンを押すと、画面の遷移はできているのですが、2つのラベルの値の取得方法がわかりません。
「cell内のボタン」を押して呼ばれるメソッドは、上記コードでいうところの「 @IBAction func toMyListButton(_ sender: Any) 」になるのでしょうか。
はい、toMyListButtonがcellに配置しているボタンになります。
実装全体が見通せないので回答にかけるほどではないのですが、
UITableView のプロパティである indexPathForSelectedRow をみれば、その時に選択されている IndexPath がわかるので、それでアクセスしてみてはどうでしょうか。
あなたの回答
tips
プレビュー