2017-02-18 5 views
2

Я только что попробовал реализовать LocationMediaItem в своем приложении Xamarin.iOS, используя JSQMessagesViewController. Все работает нормально, только проблема в том, что ячейка UICollectionView, которая должна показывать местоположение, застревает навсегда, и карта никогда не отображается на экране.Показать LocationMediaItem в JSQMessagesViewController

Вот некоторый код, как я делаю locationMediaItem в C#:

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); 
    } 

Вот образ того, что я имею в виду:

Here

Так JSQMessagesViewController знает, что я хочу, чтобы это отобразить отображение карты, но она никогда не прекращает загрузку, и я не могу понять, почему.

Надеюсь, кто-то может помочь.

+0

Что происходит, когда вы положили фиксированные Latitud и долготы при создании объекта LocationMediaItem? – apineda

+0

Я пробовал это, но не успел, я также убедился, что lat и lng не являются нулевыми – Florensvb

ответ

2

Имел ту же проблему, что и вы, и смог заставить ее работать.

Хитрость заключалась в том, чтобы не устанавливать местоположение прямо в конструкторе LocationMediaItem, оставьте его пустым, затем используйте метод SetLocation, который получает местоположение и дескриптор в качестве параметров.

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

В ручке просто перезагрузить данные

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

Примечание: Избегайте создания объекта Message в GetMessageData, как этот метод вызывается каждый раз, когда CollectionView перезагрузке. Вы должны обрабатывать создание сообщения при получении сообщения или его отправке и добавлять в коллекцию сообщений, а затем в этом методе вы просто возвращаете объект из коллекции.

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

Image showing location

+0

Чувак! Огромное вам спасибо за ваш ответ, я так долго ждал, чтобы хаха. Я только что попробовал ваше предложение, но, к сожалению, никаких результатов. Это, как я приспособил мой код: 'locationMediaItem.SetLocation (новый CLLocation (широта, долгота), делегат \t \t \t \t \t \t { \t \t \t \t \t \t \t collectionView.ReloadData(); \t \t \t \t \t \t}); ' Я добавил точку прерывания в' collection.reload', и она фактически вызывается, но карта не отображается ... Мне еще предстоит реализовать ваше предложение, а не создавать новое JSQMessage каждый раз. Я обязательно это сделаю, но я сомневаюсь, что это может быть источником моей проблемы? – Florensvb

+0

На самом деле, как только я внедрил все изменения, как вы предложили, это сработало! еще раз спасибо – Florensvb

Смежные вопросы