質問編集履歴

1 前提・実現したいことが読みにくかった為追記しました

SATOU_UKI

SATOU_UKI score 25

2017/01/29 23:13  投稿

【swift】picker (セル内)でのtapイベントの実装について
【swift】pickerのtapイベントの実装について
前提・実現したいこと  
 Picker(Cellに配置)を押した際のCell番号の取得  
 
発生している問題  
 Pickerにtapイベントを実装し、Cell番号の取得するようにしたが、  
 tapイベントが発生しない  
 
 
swiftでセル(コードとxlibで作成)にPickerを配置したのですが、Pickerを押した際にその
セルのIndexPathを取得したいのですが、以下のコードで取得することが出来ませんでした。
何が間違っているのかわからない為、もし、どなたかお分かりでしたら、教えていただけると嬉しいです。
下記コードは、
Pickerを押した時、そのpickerがあるセルの番号を取得する為、pickerに
UITapGestureRecognizerを加えて、tap時にPickerのtag(IndexPathの番号)を取得するように
プログラムを組んだつもりです。シュミレータでPickerを押しても、反応が無く、困っています。
```Swift
//自作セル
import UIKit
class List_Act: UITableViewCell{
   @IBOutlet var ActImage: UIImageView!
   @IBOutlet var ActTitle: UILabel!
   @IBOutlet var ActPicker: UIPickerView!
   
    override func awakeFromNib() {
       super.awakeFromNib()
   }
   override func setSelected(_ selected: Bool, animated: Bool) {
       super.setSelected(selected, animated: animated)
   } 
}
```
```swift
class ActListVC: UIViewController, UITableViewDelegate, UITableViewDataSource ,UIPickerViewDelegate,UIPickerViewDataSource{
   
   private var MyUIPicker:UIPickerView!
   
   var PickerViewCount:[Int] = []
   var PickerViewCountList:[[String]] = [["a"."b"]["c".["d"]]
   var PickerTagNumber:Int = 0
   var myTableView: UITableView!
   
   override func viewDidLoad() {
       super.viewDidLoad()
       
       MyUIPicker = MyUIPickerView()
       MyUIPicker.isUserInteractionEnabled = true
       MyUIPicker.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
       
       let displayWidth: CGFloat = self.view.frame.width
       let displayHeight: CGFloat = self.view.frame.height
       
       myTableView = UITableView(frame: CGRect(x: 0, y: 0, width: displayWidth, height: displayHeight)
       
     
       // Cellの登録.
       let xib = UINib(nibName: "List_Act", bundle: nil)
       myTableView.register(xib,forCellReuseIdentifier:"Cell_Act")
       
       // DataSourceの設定.
       myTableView.dataSource = self
       
       // Delegateを設定.
       myTableView.delegate = self
         
       // TableViewをViewに追加する.
       self.view.addSubview(myTableView)
   }
   
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
   }
   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { }
   
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return 2 
   }
   
   //Cellに値を設定する
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let tap = UITapGestureRecognizer(target: self, action: #selector(PickerTap(sender:)))
       let cell = tableView.dequeueReusableCell(withIdentifier: "Cell_Act") as! List_Act
       cell.ActPicker.delegate = self
       cell.ActPicker.dataSource = self
       cell.ActPicker.tag = indexPath.row
      //Pickerにタップジェスチャーを登録
       cell.ActPicker.addGestureRecognizer(tap)
       
       cell.ActPicker = MyUIPicker
       cell.ActPicker.isUserInteractionEnabled = true
       return cell
           }
               
   
   //これがシュミレータでPickerを押しても呼ばれない
   func PickerTap(sender:UITapGestureRecognizer){
       let SenderPick = sender.view as! UIPickerView
       PickerTagNumber = SenderPick.tag
       print("PickerTagNumber",PickerTagNumber)
   }
  // pickerに表示する列数を返すデータソースメソッド.
   func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
   }   
  // pickerに表示する行数を返すデータソースメソッド
   func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent
       component: Int) -> Int {
       return 2
   }
   //pickerに値を返すデリゲートメソッド.
   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int,
                   forComponent component: Int) -> String? {
       return PickerViewCountList[PickerTagNumber][row]
   }
    //pickerが選択された際に呼ばれるデリゲートメソッド.
   func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int,
                   inComponent component: Int) {}
   
   
}
```
  • Swift

    13987 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る