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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

2460閲覧

cell内のswitchの切り替え時にCell内のテキストを出力したい

murakmixi

総合スコア26

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2019/02/27 05:04

前提・実現したいこと

現在、TableViewCellに設置したUISWitchを切り替えることでIndexPathを確認することには成功しているのですが、UISwitchを切り替えることにより、cell内のtextを取得したいと考えています。
コンソールに、現在、UISwichを切り替えた際にture,false,indexの情報を出力することには成功しています。これに、cell内のテキストデータも加えたいです。
cell内のテキストを取得して、それを用いて処理の分岐を行いためです。
ですが、tag内にStringを格納できないためにどのようにして対処していいかわからないため、ご助力いただければと思います。

発生している問題・エラーメッセージ

cell内のswitchを変更した際に、どのSwitchなのかをIndexPathではなくてcell内の項目名で取得したいです。

該当のソースコード

TableViewController

1class TableViewController: UITableViewController { 2 3 let names = ["みかん","オレンジ","りんご","なし","バナナ"] 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 } 9 10 override func numberOfSections(in tableView: UITableView) -> Int { 11 return 1 12 } 13 14 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 15 return self.names.count 16 } 17 18 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 19 let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell 20 let cellData = names[indexPath.row] 21 cell.label.text = cellData.description 22 //タグの値にindexPath.rowを入れる。 23 cell.uiSwitch.tag = indexPath.row 24 //スイッチが押されたときの動作 25 cell.uiSwitch.addTarget(self, action: #selector(fundlSwitch(_:)), for: UIControl.Event.valueChanged) 26 27 return cell 28 } 29 30 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 31 32 let cellData = names[indexPath.row] 33 print("(cellData)") 34 } 35 36 @objc func fundlSwitch(_ sender: UISwitch) { 37 print(sender.tag) 38 print(sender.isOn) 39 } 40}

TableViewCell

1import UIKit 2 3//protocol Delegate: class { 4// func fundlSwitch(name:String) 5//} 6 7class TableViewCell: UITableViewCell { 8 9 @IBOutlet weak var label: UILabel! 10 @IBOutlet weak var uiSwitch: UISwitch! 11 12 }

補足情報(FW/ツールのバージョンなど)

Xcode 10.1
Swift 4.2.1

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

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

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

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

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

guest

回答1

0

indexPathが分かっているならnamesから取得すればいいのでは?

投稿2019/02/27 05:13

fuzzball

総合スコア16733

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

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

murakmixi

2019/02/27 05:21

すみません、初心者ゆえ、おっしゃることの意図するところがわからないのですが… もしよろしければ、もう少し詳細に教えていただけると助かります!
fuzzball

2019/02/27 05:23

セルに表示しているテキストって names[indexPath.row] ですよね?
fuzzball

2019/02/27 05:29

一応書いておくと、前の質問でやっていたように、indexPathからセルを取得して、そこからテキストを取得するのが正攻法です。(なんで今回セル取得を使わないのか‥?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問