2017-02-18 4 views
2

Xamarin.iOSアプリにLocationMediaItemを実装しようとしましたが、JSQMessagesViewControllerを使用しました。すべてうまくいきましたが、位置を示すはずのUICollectionViewセルが永久にロードされ、マップが決して実際に表示されることはありません。ここでJSQMessagesViewControllerのLocationMediaItemを表示

は、私はC#でlocationMediaItemを作る方法をいくつかのコードは次のとおりです。ここで

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

LocationMediaItemオブジェクトを作成するときには、LATITUDと経度固定入れるとどうなりますか? – apineda

+0

私はそれを試みたが成功しなかった、私はまた緯度とlngがnullでないことを確認した – Florensvb

答えて

2

あなたと同じ問題があり、それを機能させることができました。

トリックは、LocationMediaItemコンストラクタで正しい位置を設定するのではなく、nullのままにして、位置とハンドルをパラメータとして受け取る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(); 
} 

データをリロードします。このメソッドはCollectionviewがリロードされるたびに呼ばれるようGetMessageDataにMessageオブジェクトを作成しないでください。メッセージの受信時またはメッセージの送信時にメッセージの作成を処理し、メッセージのコレクションに追加する必要があります。このメソッドでは、コレクションからオブジェクトを返すだけです。

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

Image showing location

+0

おい!あなたの答えはありがとう、私は長い間、誰かのために待っていた。私はちょうどあなたの提案を試みたが、残念なことに結果はありません。 ; \t \t \t \t 'locationMediaItem.SetLocation(新しいCLLocation(緯度、経度)、 \t \t \t \t \t \t { \t \t \t \t \t \t \t collectionView.ReloadData()委譲:これは私が自分のコードを適応する方法であります\t \t}); ' ' collection.reload'でブレークポイントを追加しましたが、実際に呼び出されましたが、マップは表示されません... 私はあなたの提案をまだ実装しておらず、毎回新しいJSQMessageを作成しません。私は間違いなくそれをしますが、それが私の問題の原因になるのではないかと疑いますか? – Florensvb

+0

実際、私があなたが提案した通りにすべての変更を実装したら、それは機能しました!再度、感謝します – Florensvb

関連する問題