2017-02-24 4 views
-1

Ich lerne iOS-Programmierung für die letzten paar Tage, also bin ich neu in dieser Technologie. Ich baue eine einfache App, in der ich die Sammlungsansicht verwende, in der sich EventCell befindet. Jede EventCell hat eine UIButton und EventCell hat uniq value (ID kommt von JOSN API Response). Ich muss diesen Wert übergeben, um zu delegieren, welche neuen ViewController aufrufen. Ich habe Setup die delegierte Methode, die richtig funktioniert, nur um die Lösung zu finden, wie Wert auf die Schaltfläche passierenWie übergeben Sie den Wert für UIButton Klicken Sie hier, um innerhalb von CollectionViewCell zu delegieren?

PS klicken: Ich nicht Storyboard mit am

**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() 
} 

Antwort

-1

Ändern Sie Ihre Funktion einen Parameter umfassen:

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

Aktualisierung der Wähler:

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

Jetzt können Sie Führen Sie einen Vergleich zwischen sender und leaderboardButton durch, um zu sehen, ob sie gleich sind.

+0

Ich verstehe, aber wie bekommt man diese uniq ID? in dieser Funktion? –

+0

Sie können die ID von der Zelle bekommen, richtig? Überprüfen Sie die Superansicht der Schaltfläche, die Ihre Zelle sein sollte. –

0

Wenn Sie diesen ID-Wert übergeben müssen, um Objekt zu delegieren, das in Ihrem Fall ist ViewController - dann müssen Sie clickOnLeaderboard Funktion aus dem HomeControllerDelegate Protokoll ändern.

Ändern Sie es und übergeben Sie die EventCell-ID als zusätzliches Argument dazu.

delegate?.clickOnLeaderBoard(cellID)

Vergessen Sie auch nicht die Funktion Unterschrift in View-Controller-Klasse zu aktualisieren.

0

In func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) Überlastung

hinzufügen:

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

Sie buttonClicked(sender:) in Ihrem UIViewController haben sollte.

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

} 
Verwandte Themen