Tableviewcellにサブビューとしてスクロールビューを配置し、さらにそのスクロールビュー内にUIButtonを配置、ボタンのタップイベント(buttonEvent)を上位のクラスである
TopViewController内で処理をしたいと考えています。
下記のような構成で実装をしており、
createCotensView()のbutton.addTargetでタップイベント(buttonEvent)の処理先をTopVIewControllerに渡しているのですが、イベントがコールされません。
どこか誤った記述をしているのでしょうか?自力では解決できず困っております、
ご教授よろしくお願いします。
TopVIewController.swift
import UIKit class TopViewController:UITableViewController{ 〜省略 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 〜〜省略 let cell = tableView.dequeueReusableCell(withIdentifier: "testcell", for: indexPath) as! tableCustomCell return cell } @objc func buttonEvent(_ sender: Any){ print("ボタンが押されました") // ここの処理をtableCustomCellから呼び出したい! } } class tableCustomCell:UITableViewCell,UIScrollViewDelegate{ // セル内に横長のスクロールビューを配置 @IBOutlet weak var scrollView: UIScrollView! ・・・省略 override func layoutSubviews() { super.layoutSubviews() // サブビューを作る let subView = createCotensView() // スクロールビューにサブビューを追加 scrollView.addSubview(subView) // スクロールビューをサブビュー分の長さに拡張 scrollView.contentSize = subView.frame.size scrollView.contentOffset = CGPoint(x:0,y:0) } // スクロールビューに追加するコンテンツビュー(サブビュー)を追加 func createCotensView() -> UIView{ // コンテンツビューに複数のUIViewを配置 let contentView = UIView() // 1ページの幅と高さ(幅はデバイスで変化するのでviewに合わせる) let pageWidth = 240 let pageHeight = 214 let pageViewRect = CGRect(x:0,y:0,width:pageWidth,height:pageHeight) // 個別ビューを横方向に4つ、同じ間隔で配置 for i in 0..<4{ // 個別ビューを作る let pageView = UIView(frame: pageViewRect) // ボタンをビューの上に配置する let button = UIButton(type: .custom) ・・・buttonのデザインを定義(省略) // TopViewControllerのbuttonEventが呼ばれない! button.addTarget(TopViewController(), action: #selector(TopViewController.buttonEvent(_:)), for:UIControl.Event.touchUpInside)// pageView.addSubview(button) // 個別ビューの座標を決める(ページ幅だけずらしていく) let left = pageViewRect.width * CGFloat(i) let xy = CGPoint(x:left,y:0) pageView.frame = CGRect(origin: xy, size: pageViewRect.size) // createPage()で作成したViewを右方向へ配置していく contentView.addSubview(pageView) } return contentView } }
回答1件
あなたの回答
tips
プレビュー