2016-05-27 7 views
0

rief ich ein Storyboard haben wie so ein:Warum ist nicht meine Gewohnheit UICollectionViewController der GetCell Methode

enter image description here

Wie Sie sehen können, habe ich eine Home-Bildschirm. Es hat Zugriff auf einen Navigationscontroller. Es hat zwei ContainerViews, eines als Sidepane, das andere als Hauptinhalt. Ich plane, Dinge in diesen Hauptinhaltsbehälter zu tauschen, wie ich sie brauche.

Eines der Dinge, die ich in diesem Container zeigen möchte, wenn es aus der Sidepanel ausgewählt ist, ist eine CollectionView von Zellen, die Menschen zeigen. Jede Zelle hat ein Foto und die Details der Person.

Das beste Codebeispiel, das ich für CollectionView finden konnte, war das Xamarin StateRestoration Beispielprojekt. Es enthält ein Storyboard. Ich habe das Rezept so gut wie möglich befolgt, während ich an meinem eigenen Storyboard gearbeitet habe.

Das Problem ist jetzt, dass die GetCell(UICollectionView collectionView, NSIndexPath indexPath)-Methode zum Auffüllen jeder Zelle in der CollectionView nicht aufgerufen wird. Soweit ich weiß, sollte ich die Datenquelleneigenschaft des CollectionViewControllers instanziieren. Ich habe dies in AppDelegate und in der ViewDidLoad meines CollectionViewController selbst versucht, und GetCell wird immer noch nicht aufgerufen. Warum ist das?

Jede Hilfe wird geschätzt! Bitten Sie mich zu bearbeiten, wenn Sie weitere Informationen benötigen.

+0

Haben Sie auch die Delegat-Eigenschaft von UICollectionView festgelegt? – kyurkchyan

+0

Ich glaube nicht. Ich konnte nicht herausfinden, wie das im Beispielprojekt gemacht wurde. Können Sie mir einen Weg vorschlagen, dies zu tun? – Chucky

Antwort

1

Sie müssen sowohl die Datenquelle als auch den Delegaten festlegen. Wie Sie bereits erwähnt haben, haben Sie die Datenquelle festgelegt. Um festzulegen, dass der Delegat das Storyboard in xcode öffnen soll, wählen Sie UICollectionView und steuern Sie den Drag-Befehl auf den übergeordneten View-Controller. Schau dir dieses gif an.

Sie auch diese programmatisch tun können:

enter image description here

auch Sie IUICollectionViewSource Schnittstelle in Ihrem Ziel View-Controller

public partial class DetailViewController : UIViewController, IUICollectionViewSource 
    { 

     protected DetailViewController(IntPtr handle) : base(handle) 
     { 
      // Note: this .ctor should not contain any initialization logic. 
     } 


     public nint GetItemsCount(UICollectionView collectionView, nint section) 
     { 
      return 10; 
     } 

     public UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath) 
     { 
      var cell = collectionView.DequeueReusableCell("PersonCell", indexPath) as UICollectionViewCell; 
      return cell; 
     } 
    } 

EDIT 1 stellen Sie sicher umzusetzen. Geben Sie das Storyboard ein, und geben Sie unter Widgeteigenschaften den Namen für die UICollectionView - PersonCollection ein. Dann in Code-behind-View-Controller überschreiben ViewDidLoad und setzen WeakDelegate und WeakDataSource (schwach, weil wir auf jeden Fall nicht zyklisch Referenz- und Speicherlecks für iOS erstellen möchten)

public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      PersonCollection.WeakDataSource = this; 
      PersonCollection.WeakDelegate = this; 
     } 

hoffe, das hilft!

+0

Wie mache ich das in Xamarin? – Chucky

+0

Sind Sie in Windows Visual Studio? – kyurkchyan

+0

Ja. Strg und Ziehen funktioniert nicht in der Dokumentkontur. – Chucky

Verwandte Themen