2017-02-18 3 views
2

Ich habe gerade versucht, die LocationMediaItem in meinerApp mit JSQMessagesViewController zu implementieren. Alles funktionierte gut, nur das Problem ist, dass die UICollectionView Zelle, die den Standort anzeigen soll, beim Laden für immer fest ist und die Karte wird nie tatsächlich angezeigt.Show LocationMediaItem in JSQMessagesViewController

Hier ist ein Code, wie ich die locationMediaItem in C# machen:

var locationMediaItem = new LocationMediaItem(new CLLocation(latitude, longitude)); 

    if (ChatDB.Messages[indexPath.Row].user_id == SenderId) 
    { 
     locationMediaItem.AppliesMediaViewMaskAsOutgoing = true; 
     return JSQMessagesViewController.Message.Create(ChatDB.Messages[indexPath.Row].user_id, User.Instance.name, locationMediaItem); 
    } 

Hier ist ein Bild von dem, was ich meine:

Here

So ist die JSQMessagesViewController weiß ich mag es eine anzuzeigen Kartenansicht, aber es hört nie auf zu laden und ich kann nicht herausfinden warum.

Hoffe jemand kann helfen.

+0

Was passiert, wenn Sie latitud und Länge fixiert setzen, wenn das Objekt LocationMediaItem zu schaffen? – apineda

+0

Ich versuchte das aber keinen Erfolg, ich stellte auch sicher, dass lat und lng nicht null sind – Florensvb

Antwort

2

Hatte das gleiche Problem wie Sie und war in der Lage, es zum Laufen zu bringen.

Der Trick bestand darin, die Position nicht direkt auf den LocationMediaItem-Konstruktor zu setzen, sie null zu lassen und dann die Methode SetLocation zu verwenden, die den Ort und ein Handle als Parameter erhält.

var itemLoationItem = new LocationMediaItem(); 
itemLoationItem.AppliesMediaViewMaskAsOutgoing = true; 
Messages.Add (Message.Create (SenderId, SenderDisplayName, itemLoationItem)); 
itemLoationItem.SetLocation (new CLLocation (lat, long), HandleLocationMediaItemCompletionBlock); 

Im Griff nachladen nur die Daten

void HandleLocationMediaItemCompletionBlock() 
{ 
    this.CollectionView.ReloadData(); 
} 

Hinweis: Vermeiden Sie das Message-Objekt in GetMessageData erstellen, wie diese Methode jedes Mal aufgerufen wird, die Collection neu geladen wird. Sie sollten die Nachrichtenerstellung beim Empfang der Nachricht behandeln oder wenn Sie sie senden und zur Nachrichtensammlung hinzufügen, dann geben Sie bei dieser Methode einfach das Objekt aus der Sammlung zurück.

public override IMessageData GetMessageData (MessagesCollectionView collectionView, NSIndexPath indexPath) 
{ 
    return Messages [indexPath.Row]; 
} 

Image showing location

+0

Dude! Vielen Dank für deine Antwort, ich habe so lange auf jemanden gewartet, haha. Ich habe gerade Ihren Vorschlag versucht, aber leider ohne Ergebnisse. Dies ist, wie ich meinen Code angepasst: 'locationMediaItem.SetLocation (neu CLLocation (Breitengrad, Längengrad), delegieren \t \t \t \t \t \t { \t \t \t \t \t \t \t collectionView.ReloadData(); \t \t \t \t \t \t}); ' Ich habe einen Bruchpunkt bei' collection.reload' hinzugefügt und es wird tatsächlich aufgerufen, aber die Karte erscheint nicht ... Ich habe Ihren Vorschlag noch nicht implementiert, nicht jedes Mal eine neue JSQMessage zu erstellen. Ich werde das definitiv tun, aber ich bezweifle, dass es die Quelle meines Problems sein kann? – Florensvb

+0

Eigentlich habe ich alle Änderungen implementiert, wie Sie vorgeschlagen haben - es hat funktioniert! Danke noch einmal – Florensvb

Verwandte Themen