ich tun dies, indem ein Protokoll in meiner benutzerdefinierten UICollectionViewCell
machen und diese Ereignisse delegieren zurück in die UIViewController
, so etwas wie dieses
In Ihrem MyCollectionViewCell
protocol MyCollectionViewCellDelegate: class {
func didLongPressCell()
}
class MyCollectionViewCell:UICollectionViewCell {
weak var delegate:MyCollectionViewCellDelegate?
func longPressAction() {
if let del = self.delegate {
del.didLongPressCell
}
}
}
Dann zurück in Ihre MyViewController
class MyViewController:UIViewController, MyCollectionViewCellDelegate {
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! MyCollectionViewCell
cell.delegate = self
return cell
}
func didLongPressCell() {
// do what you want with the event from the cell here
}
}
Die wichtigen Bits zu erinnern, sind die Delegierten für jede Zelle setzen
cell.delegate = self
Und verabschieden Sie Ihr neues Protokoll im View-Controller, dass Sie die Ereignisse in
class MyViewController:UIViewController, MyCollectionViewCellDelegate
erhalten möchten Ich habe diesen Code nicht getestet und bin mir nicht sicher, ob ich in jeder Zelle Referenzen auf den viewController speichern soll, aber ich mache etwas sehr ähnliches, lassen Sie mich wissen, wie es weitergeht.
Edit: wenn Sie subclassed haben Ihre UICollectionView
es dann einen Verweis auf die View-Controller übergeben, so dass Sie es wie so verwenden können.
Ihre MyViewController
jetzt wie dieses
class MyViewController:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let collectionView = MyCollectionView()
collectionView.viewController = self
self.view.addSubview(collectionView)
}
}
Und Ihre individuelle Sammlung Ansicht aussehen würde MyCollectionView
class MyCollectionView:UICollectionView, MyCollectionViewCellDelegate {
weak var viewController:UIViewController?
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! MyCollectionViewCell
cell.delegate = self
return cell
}
func didLongPressCell() {
if let vc = self.viewController {
// make use of the reference to the view controller here
}
}
}
Die UICollectionViewCell
wäre das gleiche wie vor
könnten Sie sich bitte ein Stück Code schreiben?Nur der Code, der die Klasse erstellt und wo Sie die UIAlert erstellen, wird – Eric
Unterklasse der "UICollectionView", um ein "schwach Delegate: UIViewController?" Feld zu halten, und verwenden Sie "CollectionView.delegate = self" aus Ihrem View-Controller. Dann können Sie den Delegierten für die Präsentation verwenden. – sdasdadas
Wenn Sie immer noch nach einer Lösung suchen, habe ich eine Antwort, wo Sie den ersten Eltern-View-Controller für jede Ansicht bekommen können, damit ich es posten kann. –