2016-08-12 2 views
0

こんにちは、私はセル内のボタンをクリックすると、ラベルのセルに変数を渡そうとしています。しかし問題は、コードをcellForRowAtIndexPathに入れるたびに間違ったセルから毎回ラベルを取得することです。なぜ、どのようにこれを修正するには?これを行うにはtableviewのタップボタン - 間違ったセル

var variableToPass: String! 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell : MainCell! = tableView.dequeueReusableCellWithIdentifier("MainCell") as! MainCell 

    variableToPass = label1.text 

    cell.label1.userInteractionEnabled = true 
    let tapButton = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapLabel(_:))) 
    cell.label1.addGestureRecognizer(tapButton) 

    return cell as MainCell 
} 

func tapButton(sender:UITapGestureRecognizer) { 
    performSegueWithIdentifier("SegueIdentifierName", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SegueIdentifierName" { 
     let viewController = segue.destinationViewController as! ViewController 
     viewController.getVariablePassed = variableToPass 
    } 
} 
+0

あなたはあなたのコードを分離してのUITableViewCellのサブクラスを作成し、そのサブクラスでタップジェスチャーを作成する必要があります認識装置。また、ジェスチャ認識プログラムのデリゲートをCELLに設定する必要があります。 – Loxx

+0

これに 'didSelectRowAtIndexPath'デリゲートメソッドを使うことができます。 –

+0

@DharmeshKheniあなたはこれをいつでも行うことができますが、これは決してUITableViewCellのサブクラスではなく、コントローラー内では決​​してありません。 – Loxx

答えて

0

私の方法は、細胞のデリゲートを使用して、セルのための代理人として私のViewControllerを登録し、ユーザーがUIButtonをタップしたときに、後で私が

- (void)buttonWasPressedWithIndexPath:(NSIndexpath*)indexPath

のようなメソッドを呼び出しますされますcellForRowAtIndexPathでは、セルプロパティとしてindexPathを渡します。

1

variableToPassは、常にdequeueReusableCellWithIdentifierから取得した最後のセルのテキストです。そして、あなたが選択したものをセルを知っているのでその代わりに、あなたのtapButton方法でvariableToPassを設定すると、あなたは正しくvariableToPassを設定することができます。

func tapButton(sender:UITapGestureRecognizer) { 
    let label = sender.view as! UILabel 
    self.variableToPass = label.text 
    performSegueWithIdentifier("SegueIdentifierName", sender: self) 
} 
関連する問題