1

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

我怎样才能做到这一点?

谢谢

4

2 回答 2

1

可能还有其他更简单的方法可以做到这一点,比如破解集合视图的子视图或其他任何东西,但最终,我认为你会想要实现系统消息,这需要一些时间才能正确,但对于你提到的情况肯定会派上用场以及许多其他您仍然不知道但会遇到的情况。

我正在使用库的 C# Xamarin 移植版本,但概念相似。你可以做这样的事情:

  • 在 ViewDidLoad 中并在您检索消息后检查您的消息数组项目计数是否为零,然后将 JSQMessage 添加到您的消息数组中,并将“系统”作为 SenderDisplayName 以及您希望作为消息文本的一部分显示的友好消息。
  • 在 MessageBubbleImageDataForItemAtIndexPath 中检查带有 SenderDisplayName='System' 的消息并返回 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;
        }
    
于 2015-07-02T19:02:08.240 回答
0

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

于 2015-07-02T19:10:07.160 回答