Skip to content
This repository has been archived by the owner on Aug 14, 2019. It is now read-only.

Media #365

Closed
wants to merge 46 commits into from
Closed

Media #365

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
d3c60af
Added a image picker
Jun 16, 2014
fc0ba75
Added kind to VSQMessageData protocol
Jun 16, 2014
1a6393e
Added factory methods to JSQMessage for the new delegate methods
Jun 16, 2014
090e668
Added handling for the new keys to the NSCoding protocol
Jun 16, 2014
bd23c93
Added new classes to handle incoming/outgoing media cells
Jun 17, 2014
8cff772
Created nibs for media cells
Jun 17, 2014
953809d
Fixed a layout bug
Jun 17, 2014
5d9a7e8
Created MediaHandler to do the downloading and setting of the image
Jun 17, 2014
993cef8
Added SDWebImage as a dependency of the project
Jun 17, 2014
987094d
Image messages kind of looks OK
Jun 17, 2014
ba76f85
Renamed VImagePicker to JSQImagePicker
Jun 17, 2014
c57e62e
Added async media support
Jun 17, 2014
d307340
This wasn't in the commit for some reason...
Jun 17, 2014
dde2804
Added UI to show the selected image
Jun 18, 2014
f20aff1
Fixed the clipping on the image's bubble shape
Jun 18, 2014
7eeaa65
Removed the default implementation for the image's detail display
Jun 18, 2014
2d4fc1c
Removed pirlo from sample images :(
Jun 18, 2014
74f2ee1
Merge commit '9772fc8a76d04613d7c4dba4ab120bf9b6f4cf20' into media
Jul 17, 2014
f5b93b5
Fixed issue noted by @iltercengiz that crashed the app when copying a…
Jul 17, 2014
dde7c97
Added an optional accessoryview
Jul 17, 2014
5331063
Merge commit '17c8b10007fc1513837de652fdba17baa7bd0f77' into media
Jul 18, 2014
237a13c
Fixed string size calculation thanks to @rahulgautam snippet
Jul 18, 2014
c33f614
Removed unused property
Jul 18, 2014
3167fd5
Merge commit 'a98115d4cd1fea5f65be875968bda5758735f6c8' into media
Jul 21, 2014
4376b1e
Fixed topLabel alignment error
Jul 21, 2014
6071dce
Merge commit 'aa658076bda943deda2910ffa9a238a2d6f1a5e6' into media
Jul 22, 2014
4f7733d
Merge commit '752f0e20b752176b38ac8c397bb141aed5f1ca60' into media
Jul 24, 2014
d7c0e29
Merge commit 'bbecf44390cf792cfe2161ea442c89451e667f5c' into media
Jul 28, 2014
640483d
First attempt to fix bug #405
Jul 29, 2014
a00b230
Fixed the way that the ToolbarBottomLayoutGuideConstant was being cal…
Jul 29, 2014
b221b05
Merge commit 'b39f705d058362235cb0eb9e71e3e415e6979100' into media
Aug 4, 2014
573ecf2
Pass the keyboardFrame in window coordinates, which is what the deleg…
Aug 4, 2014
79af865
Merge branch 'fix-opaque-navbar' into media
Aug 4, 2014
4f764df
Merge commit 'd3bae332973d781166eae94719799d1168176a44' into media
Aug 18, 2014
80e54c2
Update JSQMessage.m
simnon Aug 21, 2014
52a89f4
Again fix for the pan-to-dismiss opaque navBars
Aug 25, 2014
3045ad4
Better algorithm for determining the new keyboard frame
Aug 25, 2014
14de035
I changed a value that I shouldn't have
Aug 25, 2014
114166c
Touch is handled on UIWindow coordinates
Aug 25, 2014
e7f49de
Changes proposed in PR
Aug 26, 2014
538e879
Merge pull request #1 from simnon/patch-1
piercifani Sep 2, 2014
a6267af
Merge branch 'develop' into media
Sep 2, 2014
b317c00
Merge branch 'media' of github.com:piercifani/JSQMessagesViewControll…
Sep 2, 2014
5230b25
Post merge damage fixed
Sep 2, 2014
b4a0a5a
Merge branch 'fix-opaque-navbar-2' into media
Sep 2, 2014
b6bd6b5
Merge branch 'develop' into media
Sep 9, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions JSQMessages.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,12 @@
88D1B0CD190606F100AFE162 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 88D1B0CB190606F100AFE162 /* [email protected] */; };
C78CEF093F584B85B4321C83 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 343577012CC24261BE4B61A1 /* libPods.a */; };
D68A9FB68FC5463D9A5B23E0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 343577012CC24261BE4B61A1 /* libPods.a */; };
EB426BB6194F410300A89161 /* JSQImagePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = EB426BB5194F410300A89161 /* JSQImagePicker.m */; };
EBB0AB9F1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB0AB9E1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.m */; };
EBB0ABA21950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB0ABA11950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.m */; };
EBB0ABA41950537E00388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.xib in Resources */ = {isa = PBXBuildFile; fileRef = EBB0ABA31950537E00388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.xib */; };
EBB0ABA61950547200388B97 /* JSQMessagesCollectionViewCellIncomingMedia.xib in Resources */ = {isa = PBXBuildFile; fileRef = EBB0ABA51950547200388B97 /* JSQMessagesCollectionViewCellIncomingMedia.xib */; };
EBB0ABA91950868F00388B97 /* JSQMessagesMediaHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB0ABA81950868F00388B97 /* JSQMessagesMediaHandler.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -230,6 +236,16 @@
88D1B0CB190606F100AFE162 /* [email protected] */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "[email protected]"; sourceTree = "<group>"; };
88FFE06619B2E5CB0038C3FF /* JSQMessagesCollectionViewDelegateFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMessagesCollectionViewDelegateFlowLayout.h; sourceTree = "<group>"; };
A0F1B1EFE54F44FEA6C4F786 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = "<group>"; };
EB426BB4194F410300A89161 /* JSQImagePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQImagePicker.h; sourceTree = "<group>"; };
EB426BB5194F410300A89161 /* JSQImagePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQImagePicker.m; sourceTree = "<group>"; };
EBB0AB9D1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMessagesCollectionViewCellOutgoingMedia.h; sourceTree = "<group>"; };
EBB0AB9E1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQMessagesCollectionViewCellOutgoingMedia.m; sourceTree = "<group>"; };
EBB0ABA01950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMessagesCollectionViewCellIncomingMedia.h; sourceTree = "<group>"; };
EBB0ABA11950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQMessagesCollectionViewCellIncomingMedia.m; sourceTree = "<group>"; };
EBB0ABA31950537E00388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JSQMessagesCollectionViewCellOutgoingMedia.xib; sourceTree = "<group>"; };
EBB0ABA51950547200388B97 /* JSQMessagesCollectionViewCellIncomingMedia.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JSQMessagesCollectionViewCellIncomingMedia.xib; sourceTree = "<group>"; };
EBB0ABA71950868F00388B97 /* JSQMessagesMediaHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMessagesMediaHandler.h; sourceTree = "<group>"; };
EBB0ABA81950868F00388B97 /* JSQMessagesMediaHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQMessagesMediaHandler.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -265,6 +281,7 @@
isa = PBXGroup;
children = (
8816A67218E9250400111919 /* JSQMessages.h */,
EB426BB3194F410300A89161 /* Utilities */,
8816A64718E9250400111919 /* Assets */,
8816A65A18E9250400111919 /* Categories */,
8816A66518E9250400111919 /* Controllers */,
Expand Down Expand Up @@ -396,15 +413,23 @@
8816A68118E9250400111919 /* JSQMessagesCollectionViewCellIncoming.h */,
8816A68218E9250400111919 /* JSQMessagesCollectionViewCellIncoming.m */,
8816A68318E9250400111919 /* JSQMessagesCollectionViewCellIncoming.xib */,
EBB0ABA01950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.h */,
EBB0ABA11950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.m */,
EBB0ABA51950547200388B97 /* JSQMessagesCollectionViewCellIncomingMedia.xib */,
8816A68418E9250400111919 /* JSQMessagesCollectionViewCellOutgoing.h */,
8816A68518E9250400111919 /* JSQMessagesCollectionViewCellOutgoing.m */,
8816A68618E9250400111919 /* JSQMessagesCollectionViewCellOutgoing.xib */,
EBB0AB9D1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.h */,
EBB0AB9E1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.m */,
EBB0ABA31950537E00388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.xib */,
8816A68718E9250400111919 /* JSQMessagesComposerTextView.h */,
8816A68818E9250400111919 /* JSQMessagesComposerTextView.m */,
8816A68918E9250400111919 /* JSQMessagesInputToolbar.h */,
8816A68A18E9250400111919 /* JSQMessagesInputToolbar.m */,
8816A68B18E9250400111919 /* JSQMessagesLabel.h */,
8816A68C18E9250400111919 /* JSQMessagesLabel.m */,
EBB0ABA71950868F00388B97 /* JSQMessagesMediaHandler.h */,
EBB0ABA81950868F00388B97 /* JSQMessagesMediaHandler.m */,
88BC4D31190C6057002E5CC6 /* JSQMessagesLoadEarlierHeaderView.h */,
88BC4D32190C6057002E5CC6 /* JSQMessagesLoadEarlierHeaderView.m */,
88BC4D34190C6086002E5CC6 /* JSQMessagesLoadEarlierHeaderView.xib */,
Expand Down Expand Up @@ -566,6 +591,15 @@
path = FactoryTests;
sourceTree = "<group>";
};
EB426BB3194F410300A89161 /* Utilities */ = {
isa = PBXGroup;
children = (
EB426BB4194F410300A89161 /* JSQImagePicker.h */,
EB426BB5194F410300A89161 /* JSQImagePicker.m */,
);
path = Utilities;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand Down Expand Up @@ -652,6 +686,7 @@
files = (
88D1B0CC190606F100AFE162 /* typing.png in Resources */,
885D597718CBD43800D77BB3 /* Main.storyboard in Resources */,
EBB0ABA41950537E00388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.xib in Resources */,
8816A69E18E9250400111919 /* message_received.aiff in Resources */,
885D596918CBD2A600D77BB3 /* Images.xcassets in Resources */,
8816A6B318E9250400111919 /* JSQMessagesCollectionViewCellOutgoing.xib in Resources */,
Expand All @@ -669,6 +704,7 @@
8816A6B818E9250400111919 /* JSQMessagesToolbarContentView.xib in Resources */,
8816A69F18E9250400111919 /* message_sent.aiff in Resources */,
8816A69518E9250400111919 /* [email protected] in Resources */,
EBB0ABA61950547200388B97 /* JSQMessagesCollectionViewCellIncomingMedia.xib in Resources */,
8816A69A18E9250400111919 /* bubble_tailless.png in Resources */,
8816A69818E9250400111919 /* bubble_stroked_tailless.png in Resources */,
8816A69718E9250400111919 /* [email protected] in Resources */,
Expand Down Expand Up @@ -765,6 +801,7 @@
8816A6AB18E9250400111919 /* JSQMessagesCollectionViewFlowLayout.m in Sources */,
8816A6B518E9250400111919 /* JSQMessagesInputToolbar.m in Sources */,
88BC4D33190C6057002E5CC6 /* JSQMessagesLoadEarlierHeaderView.m in Sources */,
EBB0ABA21950449A00388B97 /* JSQMessagesCollectionViewCellIncomingMedia.m in Sources */,
8816A6A318E9250400111919 /* UIImage+JSQMessages.m in Sources */,
8816A6A918E9250400111919 /* JSQMessagesTimestampFormatter.m in Sources */,
8816A6B018E9250400111919 /* JSQMessagesCollectionViewCellIncoming.m in Sources */,
Expand All @@ -777,6 +814,8 @@
8816A6A018E9250400111919 /* JSQSystemSoundPlayer+JSQMessages.m in Sources */,
8816A6A818E9250400111919 /* JSQMessagesBubbleImageFactory.m in Sources */,
8816A6AD18E9250400111919 /* JSQMessage.m in Sources */,
EBB0ABA91950868F00388B97 /* JSQMessagesMediaHandler.m in Sources */,
EBB0AB9F1950448100388B97 /* JSQMessagesCollectionViewCellOutgoingMedia.m in Sources */,
8897FBF918CBF967004F59C3 /* JSQDemoViewController.m in Sources */,
8816A6AF18E9250400111919 /* JSQMessagesCollectionViewCell.m in Sources */,
885D596B18CBD2A600D77BB3 /* JSQTableViewController.m in Sources */,
Expand All @@ -785,6 +824,7 @@
8816A6B418E9250400111919 /* JSQMessagesComposerTextView.m in Sources */,
8816A6AA18E9250400111919 /* JSQMessagesToolbarButtonFactory.m in Sources */,
8816A6A418E9250400111919 /* UIView+JSQMessages.m in Sources */,
EB426BB6194F410300A89161 /* JSQImagePicker.m in Sources */,
8816A6A718E9250400111919 /* JSQMessagesAvatarFactory.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
2 changes: 1 addition & 1 deletion JSQMessagesDemo/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="JRd-Be-psV">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="JRd-Be-psV">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "[email protected]"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions JSQMessagesDemo/Images.xcassets/keepcalm.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "keep-calm-and-don-t-feed-the-troll-22.png"
},
{
"idiom" : "universal",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion JSQMessagesDemo/JSQDemoViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#import "JSQMessages.h"

@class JSQDemoViewController;

@class JSQImagePicker;

@protocol JSQDemoViewControllerDelegate <NSObject>

Expand All @@ -39,6 +39,7 @@

@property (strong, nonatomic) UIImageView *outgoingBubbleImageView;
@property (strong, nonatomic) UIImageView *incomingBubbleImageView;
@property (strong, nonatomic) JSQImagePicker *picker;

- (void)receiveMessagePressed:(UIBarButtonItem *)sender;

Expand Down
62 changes: 44 additions & 18 deletions JSQMessagesDemo/JSQDemoViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
//

#import "JSQDemoViewController.h"

#import "JSQImagePicker.h"

static NSString * const kJSQDemoAvatarNameCook = @"Tim Cook";
static NSString * const kJSQDemoAvatarNameJobs = @"Jobs";
Expand All @@ -42,8 +42,8 @@ - (void)setupTestModel
[[JSQMessage alloc] initWithText:@"JSQMessagesViewController is nearly an exact replica of the iOS Messages App. And perhaps, better." sender:kJSQDemoAvatarNameJobs date:[NSDate date]],
[[JSQMessage alloc] initWithText:@"It is unit-tested, free, and open-source." sender:kJSQDemoAvatarNameCook date:[NSDate date]],
[[JSQMessage alloc] initWithText:@"Oh, and there's sweet documentation." sender:self.sender date:[NSDate date]],
[JSQMessage messageWithImage:[UIImage imageNamed:@"keepcalm"] sender:kJSQDemoAvatarNameCook],
nil];

/**
* Create avatar images once.
*
Expand Down Expand Up @@ -137,6 +137,8 @@ - (void)viewDidLoad
self.incomingBubbleImageView = [JSQMessagesBubbleImageFactory
incomingMessageBubbleImageViewWithColor:[UIColor jsq_messageBubbleGreenColor]];

self.picker = [JSQImagePicker new];

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"typing"]
style:UIBarButtonItemStyleBordered
target:self
Expand All @@ -163,11 +165,9 @@ - (void)viewDidAppear:(BOOL)animated
* You must set this from `viewDidAppear:`
* Note: this feature is mostly stable, but still experimental
*/
self.collectionView.collectionViewLayout.springinessEnabled = YES;
self.collectionView.collectionViewLayout.springinessEnabled = NO;
}



#pragma mark - Actions

- (void)receiveMessagePressed:(UIBarButtonItem *)sender
Expand Down Expand Up @@ -247,12 +247,23 @@ - (void)didPressSendButton:(UIButton *)button
- (void)didPressAccessoryButton:(UIButton *)sender
{
NSLog(@"Camera pressed!");
/**
* Accessory button has no default functionality, yet.
*/
}

__weak __typeof(self) weakSelf = self;

[self.inputToolbar hideKeyboard];
[self.picker pickImageFromViewController:self
handler:^(UIImage *image, NSError *error) {

__typeof(self) strongSelf = weakSelf;

JSQMessage *copyMessage = [JSQMessage messageWithImage:image sender:strongSelf.sender];
[strongSelf.messages addObject:copyMessage];
[strongSelf finishReceivingMessage];
}
dismissHandler:^{

}];
}

#pragma mark - JSQMessages CollectionView DataSource

Expand Down Expand Up @@ -358,6 +369,16 @@ - (NSAttributedString *)collectionView:(JSQMessagesCollectionView *)collectionVi
return nil;
}

-(UIImage *)collectionView:(JSQMessagesCollectionView *)collectionView accesoryViewForCellAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.item == 0)
{
return [UIImage imageNamed:@"accesoryImage"];
}
else
return nil;
}

#pragma mark - UICollectionView DataSource

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
Expand All @@ -370,7 +391,7 @@ - (UICollectionViewCell *)collectionView:(JSQMessagesCollectionView *)collection
/**
* Override point for customizing cells
*/
JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath];
UICollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath];

/**
* Configure almost *anything* on the cell
Expand All @@ -388,16 +409,21 @@ - (UICollectionViewCell *)collectionView:(JSQMessagesCollectionView *)collection

JSQMessage *msg = [self.messages objectAtIndex:indexPath.item];

if ([msg.sender isEqualToString:self.sender]) {
cell.textView.textColor = [UIColor blackColor];
}
else {
cell.textView.textColor = [UIColor whiteColor];
if (msg.kind == JSQMessageTextKind)
{
JSQMessagesCollectionViewCell *textCell = (JSQMessagesCollectionViewCell *) cell;

if ([msg.sender isEqualToString:self.sender]) {
textCell.textView.textColor = [UIColor blackColor];
}
else {
textCell.textView.textColor = [UIColor whiteColor];
}

textCell.textView.linkTextAttributes = @{ NSForegroundColorAttributeName : textCell.textView.textColor,
NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid) };
}

cell.textView.linkTextAttributes = @{ NSForegroundColorAttributeName : cell.textView.textColor,
NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid) };

return cell;
}

Expand Down
2 changes: 2 additions & 0 deletions JSQMessagesViewController.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ Pod::Spec.new do |s|
s.requires_arc = true

s.dependency 'JSQSystemSoundPlayer'
s.dependency 'SDWebImage'

end
Loading