blob: c1124cb1b02f6f5f934a388c4fca06b91993ea61 [file] [log] [blame]
//
// Created by Jesse Squires
// http://www.jessesquires.com
//
//
// Documentation
// http://cocoadocs.org/docsets/JSQMessagesViewController
//
//
// GitHub
// https://github.com/jessesquires/JSQMessagesViewController
//
//
// License
// Copyright (c) 2014 Jesse Squires
// Released under an MIT license: http://opensource.org/licenses/MIT
//
#import <UIKit/UIKit.h>
#import "JSQMessagesLabel.h"
#import "JSQMessagesCellTextView.h"
@class JSQMessagesCollectionViewCell;
/**
* The `JSQMessagesCollectionViewCellDelegate` protocol defines methods that allow you to manage
* additional interactions within the collection view cell.
*/
@protocol JSQMessagesCollectionViewCellDelegate <NSObject>
@required
/**
* Tells the delegate that the avatarImageView of the cell has been tapped.
*
* @param cell The cell that received the tap touch event.
*/
- (void)messagesCollectionViewCellDidTapAvatar:(JSQMessagesCollectionViewCell *)cell;
/**
* Tells the delegate that the message bubble of the cell has been tapped.
*
* @param cell The cell that received the tap touch event.
*/
- (void)messagesCollectionViewCellDidTapMessageBubble:(JSQMessagesCollectionViewCell *)cell;
/**
* Tells the delegate that the cell has been tapped at the point specified by position.
*
* @param cell The cell that received the tap touch event.
* @param position The location of the received touch in the cell's coordinate system.
*
* @discussion This method is *only* called if position is *not* within the bounds of the cell's
* avatar image view or message bubble image view. In other words, this method is *not* called when the cell's
* avatar or message bubble are tapped.
*
* @see `messagesCollectionViewCellDidTapAvatar:`
* @see `messagesCollectionViewCellDidTapMessageBubble:`
*/
- (void)messagesCollectionViewCellDidTapCell:(JSQMessagesCollectionViewCell *)cell atPosition:(CGPoint)position;
/**
* Tells the delegate that an actions has been selected from the menu of this cell.
* This method is automatically called for any registered actions.
*
* @param cell The cell that displayed the menu.
* @param action The action that has been performed.
* @param sender The object that initiated the action.
*
* @see `JSQMessagesCollectionViewCell`
*/
- (void)messagesCollectionViewCell:(JSQMessagesCollectionViewCell *)cell didPerformAction:(SEL)action withSender:(id)sender;
@end
/**
* The `JSQMessagesCollectionViewCell` is an abstract base class that presents the content for
* a single message data item when that item is within the collection view’s visible bounds.
* The layout and presentation of cells is managed by the collection view and its corresponding layout object.
*
* @warning This class is intended to be subclassed. You should not use it directly.
*
* @see JSQMessagesCollectionViewCellIncoming.
* @see JSQMessagesCollectionViewCellOutgoing.
*/
@interface JSQMessagesCollectionViewCell : UICollectionViewCell
/**
* The object that acts as the delegate for the cell.
*/
@property (weak, nonatomic) id<JSQMessagesCollectionViewCellDelegate> delegate;
/**
* Returns the label that is pinned to the top of the cell.
* This label is most commonly used to display message timestamps.
*/
@property (weak, nonatomic, readonly) JSQMessagesLabel *cellTopLabel;
/**
* Returns the label that is pinned just above the messageBubbleImageView, and below the cellTopLabel.
* This label is most commonly used to display the message sender.
*/
@property (weak, nonatomic, readonly) JSQMessagesLabel *messageBubbleTopLabel;
/**
* Returns the label that is pinned to the bottom of the cell.
* This label is most commonly used to display message delivery status.
*/
@property (weak, nonatomic, readonly) JSQMessagesLabel *cellBottomLabel;
/**
* Returns the text view of the cell. This text view contains the message body text.
*
* @warning If mediaView returns a non-nil view, then this value will be `nil`.
*/
@property (weak, nonatomic, readonly) JSQMessagesCellTextView *textView;
/**
* Returns the bubble image view of the cell that is responsible for displaying message bubble images.
*
* @warning If mediaView returns a non-nil view, then this value will be `nil`.
*/
@property (weak, nonatomic, readonly) UIImageView *messageBubbleImageView;
/**
* Returns the message bubble container view of the cell. This view is the superview of
* the cell's textView and messageBubbleImageView.
*
* @discussion You may customize the cell by adding custom views to this container view.
* To do so, override `collectionView:cellForItemAtIndexPath:`
*
* @warning You should not try to manipulate any properties of this view, for example adjusting
* its frame, nor should you remove this view from the cell or remove any of its subviews.
* Doing so could result in unexpected behavior.
*/
@property (weak, nonatomic, readonly) UIView *messageBubbleContainerView;
/**
* Returns the avatar image view of the cell that is responsible for displaying avatar images.
*/
@property (weak, nonatomic, readonly) UIImageView *avatarImageView;
/**
* Returns the avatar container view of the cell. This view is the superview of the cell's avatarImageView.
*
* @discussion You may customize the cell by adding custom views to this container view.
* To do so, override `collectionView:cellForItemAtIndexPath:`
*
* @warning You should not try to manipulate any properties of this view, for example adjusting
* its frame, nor should you remove this view from the cell or remove any of its subviews.
* Doing so could result in unexpected behavior.
*/
@property (weak, nonatomic, readonly) UIView *avatarContainerView;
/**
* The media view of the cell. This view displays the contents of a media message.
*
* @warning If this value is non-nil, then textView and messageBubbleImageView will both be `nil`.
*/
@property (weak, nonatomic) UIView *mediaView;
/**
* Returns the underlying gesture recognizer for tap gestures in the avatarImageView of the cell.
* This gesture handles the tap event for the avatarImageView and notifies the cell's delegate.
*/
@property (weak, nonatomic, readonly) UITapGestureRecognizer *tapGestureRecognizer;
#pragma mark - Class methods
/**
* Returns the `UINib` object initialized for the cell.
*
* @return The initialized `UINib` object or `nil` if there were errors during
* initialization or the nib file could not be located.
*/
+ (UINib *)nib;
/**
* Returns the default string used to identify a reusable cell for text message items.
*
* @return The string used to identify a reusable cell.
*/
+ (NSString *)cellReuseIdentifier;
/**
* Returns the default string used to identify a reusable cell for media message items.
*
* @return The string used to identify a reusable cell.
*/
+ (NSString *)mediaCellReuseIdentifier;
/**
* Registers an action to be available in the cell's menu.
*
* @param action The selector to register with the cell.
*
* @discussion Non-standard or non-system actions must be added to the `UIMenuController` manually.
* You can do this by creating a new `UIMenuItem` and adding it via the controller's `menuItems` property.
*
* @warning Note that all message cells share the all actions registered here.
*/
+ (void)registerMenuAction:(SEL)action;
@end