2017-05-18 17 views
0

私はカスタムtableviewcellを持っていて、ボタンをクリックするとセル内にボタンがあります。次のviewcontrollerはコンテンツを表示しませんが、ここで右の内容を示す次のビューコントローラが私のコードです:ここスウィフトのUIbuttonがtableviewCell内で実行されていません。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! TableViewCell 
    cell.label.text = numberArray[indexPath.row] 
cell.button.tag = indexPath.row 

    cell.button.addTarget(self,action:#selector(TableViewController.someAction(sender:)), 
          for:.touchUpInside) 
    return cell 
} 

は私のボタンアクションです:

func someAction(sender : UIButton){ 

self.performSegue(withIdentifier: "showDetail", sender: self) 

} 

、ここで私のセグエ機能さ:

あなたはカスタムセルを使用して、手順を実行する必要があり
+0

何が欲しいですか?あなたは別のView Controllerとしてデータを表示しますか? –

+0

タッピングボタンで新しいViewControllerにセグをしたい – UncleJunior

答えて

2

performSegue(withIdentifier:sender:)である。

func someAction(sender: UIButton) { 
    let point = sender.superview?.convert(sender.center, to: self.tableView) 
    if let indexPath = self.tableView.indexPathForRow(at: point!) { 
     //pass indexPath as sender with performSegue 
     self.performSegue(withIdentifier: "showDetail", sender: indexPath) 
    } 
} 

は今 prepare(for:sender:)indexPathsenderをキャストして、あなたはすべての良い行くことに。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showDetail" { 
     if let indexPath = sender as? IndexPath 
     { 
      (segue.destination as! ViewController).number = numberArray[indexPath.row] 
     } 
    } 
} 

注:tagを使用することを無視してそれはバッターがあります。

+0

タグの代わりに何をすればよいですか? – UncleJunior

+0

@UncleJunior 'tag'を使わずに' indexPath'を得る方法をお勧めしました。私はそれもタグでリレーしないことがAppleによって推奨されているので、それを言及しています。 –

0

  • はストーリーボードからカスタムセルにアクションとアウトレットを追加します。
  • その後、カスタムセルにプロトコルメソッドを追加する必要があります( カスタムデリゲートメソッド)。
  • これらのメソッドをView Controllerで使用します。詳細を表示するには 機能を追加してください。
+0

答えにコードを追加してもらえませんか、私はそれを行う方法がわかりません – UncleJunior

+0

2番目の解決策:ボタンにインデックスパスとしてタグを追加して使用する必要がありますこのタグの代わりにindexPathForSelectedRow –

+0

これは私がやったことですが、ボタンをクリックしても機能しないようですが、最初にセルを選択してから、ボタンをクリックして動作させてください、BTW thx – UncleJunior

0

このお試しください:問題は、あなたが直接ボタンをクリックするとprepare(for:sender:)にあなたが今indexPathForSelectedRowを使用してindexPathを得ている、あなたが必要なものを選択していないと、細胞は、細胞のindexPathを通過させることであるということである

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 


      if segue.identifier == "showDetail" { 


        (segue.destination as! ViewController).number = numberArray[sender.tag] 

       } 

     } 
+0

値は 'Any? 'メンバー 'タグ'がありません – UncleJunior

+0

uiButtonを送信引数で渡してみてください –

関連する問題