2017-02-24 7 views
-1

私はこの数日間、iOSプログラミングを学んでいるので、私はこの技術に慣れていません。私はそこにEventCellを持っているコレクションビューを使用しているシンプルなアプリケーションを構築しています。各EventCellには1つのUIButtonがあり、EventCellにはユニークな値(IDはJOSN APIの応答から来る)があります。新しいViewControllerを呼び出すためにその値を渡す必要があります。私はUIButtonで値を渡す方法collectionViewCell内でクリックして委任しますか?

PSをクリックすると、セットアップにちょうどボタンの値を渡す方法について解決策を見つけること、正しく機能しているデリゲートメソッドを持っている:私は、パラメータを含めるようにストーリーボード

**EventCell.swift** 

lazy var leaderboardButton: UIButton = { 
    let leaderboardBtn = UIButton(type: .system) 
    leaderboardBtn.setTitle("LeaderBoard", for: .normal) 
    leaderboardBtn.addTarget(self, action: #selector(handleLeaderBoardClick), for: .touchUpInside) 
    leaderboardBtn.tintColor = .white 
    return leaderboardBtn 
}() 

weak var delegate: HomeControllerDelegate? 
func handleLeaderBoardClick() { 
    // need to get uniq value and pass here.... 
    delegate?.clickOnLeaderBoard() 
} 

答えて

-1

変更あなたの機能を使用していない:

func handleLeaderBoardClick(_ sender: UIButton) { 
    // need to get uniq value and pass here.... 
    delegate?.clickOnLeaderBoard() 
} 

更新セレクター:今すぐ

leaderboardBtn.addTarget(self, action: #selector(handleLeaderBoardClick(_:)), for: .touchUpInside) 

あなたがすることができますsenderleaderboardButtonの比較を実行して、同じかどうかを確認します。

+0

私はあなたのポイントを得るが、そのユニークIDを取得する方法は?その機能では? –

+0

セルからIDを取得できますか?あなたのセルでなければならないボタンのスーパービューをチェックしてください。 –

0

あなたのケースにある代理オブジェクトにそのID値を渡す必要がある場合、ViewControllerです - HomeControllerDelegateプロトコルからclickOnLeaderboard関数を変更する必要があります。

これを変更し、追加の引数としてEventCellのIDを渡します。

delegate?.clickOnLeaderBoard(cellID)

また、ビューコントローラクラスの関数シグネチャを更新することを忘れないでください。

0

過負荷func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)

は、これを追加します。

cell.yourButton.tag = indexPath.row 
cell.yourButton.addTarget(self, action: #selector(buttonClicked(sender:)), for: .touchUpInside) 

あなたのUIViewControllerでbuttonClicked(sender:)を持っている必要があります。

buttonClicked(sender:){ 
tag = sender.tag 
// you can use this tag to change your view controller 

} 
関連する問題