¿Cómo puedo activar una segue onclick en una celda personalizada en UICollectionView?

Estoy intentando realizar una segue (con properties agregadas) a un controller de vista de detalles cuando se resalta una celda personalizada en mi UICollectionView . Estoy un poco estancado en cómo lograr esto, ya que no puedo usar PerformSegue de la subclass UICollectionViewSource , y no puedo get la celda seleccionada de la UICollectionView .

Aquí hay una versión abreviada de lo que tengo hasta ahora:

Fuente de la colección:

 public class ProductCollectionDataSource : UICollectionViewSource { public ProductCollectionDataSource() { Products = new List<FeedItem>(); } public List<FeedItem> Products { get; set; } public override void ItemUnhighlighted(UICollectionView collectionView, NSIndexPath indexPath) { var cell = (MultiColumnCell)collectionView.CellForItem(indexPath); cell.Alpha = 1.0f; // Perform segue here, passing this cell's data...? } } 

UIViewController:

 public partial class DashboardViewController : UIViewController { private ProductCollectionDataSource _dataSource; public override void ViewDidLoad() { _dataSource = new ProductCollectionDataSource(); CollectionView.Source = _dataSource; GetProducts(); } private async void GetProducts() { _dataSource.Products = new List<FeedItem>(await API.FeedService.Get()); CollectionView.ReloadData(); } } 

Entonces, ¿cómo puedo activar el segue en UIViewController, en function de la celda seleccionada en UICollectionView?

Puede pasar una WeakReference a su controller y luego usar eso para hacer el Segue:

 public class ProductCollectionDataSource : UICollectionViewSource { WeakReference<DashboardViewController> _dvcRef; public List<FeedItem> Products { get; set; } public ProductCollectionDataSource(WeakReference<DashboardViewController> dvc) { Products = new List<FeedItem>(); _dvcRef = dvc; } public override void ItemUnhighlighted(UICollectionView collectionView, NSIndexPath indexPath) { var cell = (MultiColumnCell)collectionView.CellForItem(indexPath); cell.Alpha = 1.0f; DashboardViewController dashboardVc; if (_dvcRef.TryGetTarget(out dashboardVc){ dashboardVc.PerformSegue("Identifier"); } } } } 
  1. Configura tu segue en el storyboard (drag and drop)
  2. Abra el panel derecho para agregar un identificador segue (básicamente una cadena como "CustomSegue")
  3. Use the collectionView delegate (didSelectItemAtIndexPath 🙂 para activar el toque de usuario en una celda
  4. call [self performSegueWithIdentifier: @ propietario "CustomSegue": self]
  5. Implementar el método prepareForSegue en el controller que gestiona el UICollectionVirtual
  6. Comtesting si [segue.identifier isEqualToString: @ "CustomSegue"]
  7. Si es así, obtenga el segue.destinationViewController (que se supone que es su DetailViewController
  8. Pase cualquier propiedad que desee (segue.destinationViewController.property = propertyIWantToPass)

Realice una order manual desde su ViewController al controller de vista detallada. Configure el Segue en el método – (void) prepareForSegue como siempre.

Luego, llámalo manualmente donde y cuando lo desees:

 -(void)yourCall{ [self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self]; }