UITableView上のどのセルをタップしたかによりそれぞれ違う処理を行いたいので、タップしたセルを特定する方法について質問です。
メインストーリーボードで指定した1つのセルの識別子を使いセルを2つ作り、それぞれのtextLabel.textに別々の文字を入れた状態でセルをタップするとそれぞれ別々の処理を行いたいので、タップされたセルを特定する方法について教えてください。
具体的には2つのセルを持つUITableViewが配置された画面でセルをタップするとUITableViewが配置された次の画面に遷移するのですが押したセルにより次の画面のUITableViewに表示されるセルの内容を変更する、という事を実装したいのですが複数あるセルのうちどれを押したかを判定する方法について教えていください。
セルであるSoundOneをタップすると次の画面のUITableViewのセルを上からこのように表示
sound1
sound1
sound1
セルであるSoundTwoをタップすると次の画面のUITableViewのセルを上からこのように表示
sound2
sound2
sound2
↑これを実装しようと僕が試みた方法はセルをタップし、画面が遷移する時にセルのtextLabel.textを次の画面を担当するファイル内のクラスのプロパティsoundTypeに文字列として格納し、次の画面のUITableViewCellを戻り値とするメソッドTableViewのブロック内でif文を使いsoundTypeの中身によって返すセルを使い分けるというものです。
※最初の画面のTableView上のセルは2つあり一つ目のセルのtextLabel.textにはSoundOne、二つ目のセルのtextLabel.textにはSoundTwoが代入されている
※セルをタップするとViewController2が担当するビューへ遷移する事はメインストーリーボードで設定している。
※以下のコードでは説明に必要な部分だけを書いているものです。
ViewControllerファイル内
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let cell = myTableView1.dequeueReusableCellWithIdentifier("Cell")
let nextViewController = segue.destinationViewController as! ViewController2
if cell?.textLabel?.text == "SoundOne" { nextViewController.soundType = "SoundOne" } else { nextViewController.soundType = "SoundTwo" } }
※ soundTypeはViewController2ファイル内に定義されているプロパティ。
※ Cellはセルの識別子としてメインストーリボードで設定してある。
ViewController2ファイル内
var soundType: String = ""
var soundArray = [["sound1", "sound1", "sound1"], ["sound2", "sound2", "sound2"]]
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath)
if soundType == "SoundOne" { cell.textLabel?.text = soundArray[0][indexPath.row] return cell } else { cell.textLabel?.text = soundArray[1][indexPath.row] return cell } }
このような方法で試してみたのですが失敗でした。おそらく原因はViewControllerファイル内のif cell?.textLabel?.text == "SoundOne"というコードでcell?.textLabel?.textの部分はタップしたセルのタイトルが格納されていると思っていたのですがprint()文で確認したところ、どうやら2つのセルのタイトルが格納されていたということだと思います。どうやったら押したセルを特定できるのかを教えてください!
ちゃんと説明できているのか自信がないので、不備な部分などがありましたらご指摘ください。
修正しました。
回答してくださった方により間違いを見つけましたので修正致します。
ViewController2内
if soundType == "Sound"
↓
修正
↓
if soundType == "SoundOne"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/26 03:04
2016/04/26 04:36 編集
2016/04/26 03:41 編集
2016/04/26 03:50
2016/04/26 04:16
2016/04/26 12:32
2016/04/27 00:20
2016/04/27 00:20
2016/04/27 08:08 編集