12409


以下のtapPickView関数で該当するtableViewCellのcell番号[indexPath.row]を取得する方法が知りたいです。tableViewCellの上にtopViewが乗っており、その上にpickViewが乗っています。pickViewをtapするとtapPickView関数が起動する形になっています。

[code]

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("QuestionAndAnswerReuseIdentifier", forIndexPath: indexPath) as! QuestionAndAnswerTableViewCell        
    
        cell.topView.pickView.userInteractionEnabled = true
        var tap = UITapGestureRecognizer(target: self, action: "tapPickView")
        cell.topView.pickView.addGestureRecognizer(tap)
        return cell
    }
    
    func tapPickView(){
        answerQuestionView = AnswerQuestionView()
        answerQuestionView.questionID = Array[/*ここにcell番号を入れたい*/]
    
        self.view.addSubview(answerQuestionView)
    }
    
[/code]


CC BY-SA 3.0
2015-07-16T05:47:50.100
12406
2015-07-16T08:03:10.997
2015-07-16T07:41:08.767
7362
6098
question
ios swift
[Swift]TableViewCell内に設置した関数への、cell番号の受け渡し


ご提示のコードに、追加する考え方と、アイデアを並べます。

  1. `UIGestureRecognizer`のActionメソッドには、引数をつけることができる。引数は`UIGestureRecognizer`自身になる。
  2. `UIGestureRecognizer`には、プロパティ`view`があって、ジェスチャーを発生したViewを取得できる。
  3. `UIView`には、`Int`型のプロパティ`tag`がある。これに行番号を入れておくことで、テーブル外部から、タップした行番号を知ることができる。

* * *
[code]

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("QuestionAndAnswerReuseIdentifier", forIndexPath: indexPath) as! QuestionAndAnswerTableViewCell        
    
        cell.topView.pickView.userInteractionEnabled = true
        // var tap = UITapGestureRecognizer(target: self, action: "tapPickView")
        // tapは、変更を受けないので、letで宣言してかまいません。
        // セレクタに引数をつけるには、コロン「:」をつけます。
        let tap = UITapGestureRecognizer(target: self, action: "tapPickView:")
        cell.topView.pickView.addGestureRecognizer(tap)
        // pickViewのプロパティtagに行番号を代入する。
        cell.topView.pickView.tag = indexPath.row
        return cell
    }
    
    // func tapPickView(){
    // アクションメソッドに、引数を追加。
    func tapPickView(gesture: UIGestureRecognizer) {
        answerQuestionView = AnswerQuestionView()
        // タップしたViewを取得
        if let theView = gesture.view {
            // 行番号を取得。
            let rowNumber = theView.tag
            answerQuestionView.questionID = hogeArray[/*ここにcell番号を入れたい*/rowNumber] // はい、入りましたよ。
        }
    
        self.view.addSubview(answerQuestionView)
    }
    
[/code]


CC BY-SA 3.0
2015-07-16T07:39:54.297
12409
2015-07-16T08:03:10.997
2015-07-16T08:03:10.997
7362
7362
12406
answer