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

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

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

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

Swift

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

解決済

XIBを使ったTableViewCell上のボタンで画面遷移する方法

eotw
eotw

総合スコア14

iOS

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

Swift

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

1回答

0評価

0クリップ

501閲覧

投稿2021/12/01 03:51

前提・実現したいこと

SwiftでTodoアプリを作成しています。
XIBを使ったTableViewCell上のボタン(StoryBoardでカスタムセルにボタンを配置)で画面遷移する機能を実装したいです。
いくつか方法はあると思いますが、今回はDelegateを使用しています。

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

ボタンをタップした際に特にエラーは出ず、無反応状態となっています。

該当のソースコード

TableViewCell

Swift

import UIKit protocol MainTableViewCellDelegate { func takingButton() } class MainTableViewCell: UITableViewCell { @IBOutlet weak var timeField: UILabel! @IBOutlet weak var medicineField: UILabel! var mainTableViewCellDelegate: MainTableViewCellDelegate? override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } @IBAction func addAction(_ sender: Any) { mainTableViewCellDelegate?.takingButton() } }

ViewController

Swift

import UIKit import RealmSwift class RemindViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { let realm = try! Realm() var itemList:Results<TodoItem>! var token:NotificationToken! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() tableView.register(UINib(nibName: "MainTableViewCell", bundle: nil), forCellReuseIdentifier: "customCell") itemList = realm.objects(TodoItem.self).sorted(byKeyPath: "date") token = realm.observe{ notification, realm in self.tableView.reloadData() } } func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 150 } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { infoHelper().deleteItem(item: itemList[indexPath.row], token: token) tableView.deleteRows(at: [indexPath], with: .automatic) } } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return itemList.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! MainTableViewCell let item = itemList[indexPath.row] cell.medicineField?.text = item.name cell.timeField?.text = infoHelper().dateToString(date: item.date) cell.layer.cornerRadius = 10 return cell } @objc func buttonEvent(_ sender: UIButton) { print("buttonTag", sender.tag) } } extension RemindViewController: MainTableViewCellDelegate { func takingButton() { performSegue(withIdentifier: "toJudgementVC", sender: nil) } }

試したこと

下記の記事を参考に試しましたが、現状で止まっており、解決できずという状況です。
https://boku-note.org/xib-tableviewcell/

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

iOS

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

Swift

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