如何在JSQMessagesViewController中没有显示消息时显示自定义文本?

时间:2015-06-15 19:01:00

标签: ios jsqmessagesviewcontroller

当我使用JSQMessagesViewController加载消息视图时,很多时候没有消息,所以我想显示一个"还没有消息"消息,如在视图的中间或顶部。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:1)

可能还有其他更简单的方法来执行此操作,例如黑客攻击集合视图的子视图或其他什么,但最终,我认为您希望实现系统消息,这需要一些时间才能正确,但对于案例肯定会派上用场就像你提到的那样以及你还不知道的其他许多案例,但会以你的方式来实现。

我使用的是C#Xamarin移植版本的库,但概念类似。你可以这样做:

    在ViewDidLoad中
  • 并在检索到您的消息后检查您的消息数组项数是否为零,然后使用' System'将消息数组添加到JSQMessage中。作为SenderDisplayName和您希望作为消息文本的一部分显示的友好消息。
  • MessageLubbleImageDataForItemAtIndexPath中的
  • 使用SenderDisplayName ='系统'检查邮件。并返回null,这样您就不会收到消息泡沫。
  • 复制JSQMessagesCollectionViewCellIncoming.xib及其自定义类,并重命名为JSQMessagesCollectionViewCellSystem.xib。
  • 在JSQMessagesCollectionView中注册该自定义单元格类型:

        this.RegisterNibForCell(JSQMessagesCollectionViewCellActions.Nib("JSQMessagesCollectionViewCellActions"),JSQMessagesCollectionViewCellActions.CellReuseIdentifier("JSQMessagesCollectionViewCellActions"));
        this.RegisterNibForCell(JSQMessagesCollectionViewCellActions.Nib("JSQMessagesCollectionViewCellActions"),JSQMessagesCollectionViewCellActions.MediaCellReuseIdentifier("JSQMessagesCollectionViewCellActions"));
    
  • 在JSQMessagesCollectionViewCell中的ApplyLayoutAttributes方法中,为JSQMessagesCollectionViewCellSystem类型的单元格返回CGSizeMake(0,0)。像这样的东西:

        if (this.IsKindOfClass (new ObjCRuntime.Class     ("JSQMessagesCollectionViewCellIncoming"))) {
            this.AvatarViewSize = customAttributes.IncomingAvatarViewSize;
        } else if (this.IsKindOfClass (new ObjCRuntime.Class ("JSQMessagesCollectionViewCellOutgoing"))) {
            this.AvatarViewSize = customAttributes.OutgoingAvatarViewSize;
        } else {
            this.AvatarViewSize = new CGSize (0, 0);
        }
    
  • 在JSQMessagesViewController中的CellForRowAtIndexPath中,您可以执行以下操作来使消息居中:

        if (messageItem.SenderId == "System") {
            cell.TextView.TextAlignment = UITextAlignment.Center;
            cell.TextView.TextColor = UIColor.LightGray;
            cell.MessageBubbleContainerWidthConstraint.Constant = UIScreen.MainScreen.Bounds.Width - 25;
        }
    

答案 1 :(得分:0)

您可以使用MBProgressHUB框架,它非常简单地实现您的任务。有一个链接https://github.com/jdg/MBProgressHUD