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

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

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

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

iOS

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

Xcode

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

Swift

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

Q&A

解決済

1回答

1031閲覧

Delegateの設定の仕方がわかりません

Himukinman

総合スコア0

Delegates

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/06/15 06:34

編集2021/06/18 06:31

前提・実現したいこと

ViewController内で書いているメソッドをカスタムセルクラスで使いたい。

発生している問題

カスタムクラスで呼び出されない。

該当のソースコード

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIScrollViewDelegate、removeDelegate { @IBOutlet weak var tableView0: UITableView! @IBOutlet weak var tableView1: UITableView! weak var protcol:removeDelegate? func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if tableView.tag == 0 { if let cell0 = self.tableView0.dequeueReusableCell(withIdentifier: "FirstTableViewCell") as? FirstTableViewCell { cell0.cellItem = Info[indexPath.row] cell0.delegate = self cell0.protcol = self return cell0 } }else if tableView.tag == 1 { if let cell1 = self.tableView1.dequeueReusableCell(withIdentifier: "FirstTableViewCell") as? FirstTableViewCell { cell1.cellItem2 = InfoSearch[indexPath.row] cell1.delegate = self cell1.protcol = self return cell1 } } remove(){ print("remove") } }
protocol removeDelegate:class { func remove() } class FirstTableViewCell: UITableViewCell { weak var protcol:removeDelegate? @IBAction func RemoveAction(_ sender: Any) { self.protcol?.remove() } }

試したこと

@IBAction func RemoveAction(_ sender: Any) { let storyboard = UIStoryboard(name: "View", bundle: nil) // storyboardのインスタンスを名前指定で取得 let view = storyboard.instantiateInitialViewController() as! ViewController self.protcol? = view self.protcol?.remove() }
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIScrollViewDelegate、removeDelegate { weak var protcol:removeDelegate? let cell = FirstTableViewCell() override func viewDidLoad() { super.viewDidLoad() cell.protcol? = self

デリゲートの設定?として試しましたが、うまくいきませんでした。
プログラミング初心者ですのでご教授いただけると幸いです。

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

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

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

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

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

hoshi-takanori

2021/06/15 06:56

ViewController の cellForRowAt で cell.protcol? = self すれば良いのでは。
Himukinman

2021/06/17 06:50

上記試しましたが、反応ありませんでした。 cellというのはlet cell = FirstTableViewCell()⇦これなのですが、インスタンス化ができていないということなのでしょうか?
hoshi-takanori

2021/06/17 08:24

cell は画面に表示するデータの件数分作られるので、編集履歴のように ViewController の直下でそれをするのは意味がありませんし、普通は直接 FirstTableViewCell() するのではなく、dequeueReusableCell(withIdentifier:for:) メソッドの中で tableView.dequeueReusableCell(withIdentifier:"Cell", for: indexPath) みたいにして作ります。 テーブルビューの使い方を基本から見直す必要がありそうですね。ViewController のソース全体と、storyboard または xib ふぁいるがどうなってるかを教えてくれたら見てみますけど。
Himukinman

2021/06/18 07:51 編集

上記のコードで成功しました! Tableview一つ一つにデリゲートを設定したらできました。ありがとうございました。
hoshi-takanori

2021/06/18 07:47

ViewController の cellForRowAt で cell0.protcol = self や cell1.protcol = self してるので、あとは FirstTableViewCell の RemoveAction が呼ばれれば大丈夫なはずですけど、storyboard でセル上にボタンがあって、Touch Up Inside で RemoveAction が呼ばれるようになってるんですよね? また、ViewController の weak var protcol:removeDelegate? は不要だし、FirstTableViewCell には delegate は見当たらないので cell0.delegate = self や cell1.delegate = self はエラーになるのでは。
guest

回答1

0

自己解決

dequeueReusableCell(withIdentifier:for:) メソッドの中でTableview一つ一つにデリゲートを設定したらできました。ありがとうございました。

投稿2021/06/18 07:52

Himukinman

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問