私信模块:发送私信
This commit is contained in:
@@ -100,6 +100,7 @@
|
|||||||
18EE3FEE2750CE6D00A452BF /* NIMMessageUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */; };
|
18EE3FEE2750CE6D00A452BF /* NIMMessageUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */; };
|
||||||
18EE3FF12750D2AD00A452BF /* NIMTimeUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */; };
|
18EE3FF12750D2AD00A452BF /* NIMTimeUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */; };
|
||||||
18EE3FF42750FA3700A452BF /* UIView+NIM.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FF32750FA3700A452BF /* UIView+NIM.m */; };
|
18EE3FF42750FA3700A452BF /* UIView+NIM.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE3FF32750FA3700A452BF /* UIView+NIM.m */; };
|
||||||
|
18EE401A2754BA9F00A452BF /* NIMMessageMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE40182754BA9F00A452BF /* NIMMessageMaker.m */; };
|
||||||
73FFADDC93E195344047A2EC /* Pods_xplan_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_xplan_ios.framework */; };
|
73FFADDC93E195344047A2EC /* Pods_xplan_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_xplan_ios.framework */; };
|
||||||
9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0E1C5826E77022005D4442 /* BaseNavigationController.m */; };
|
9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0E1C5826E77022005D4442 /* BaseNavigationController.m */; };
|
||||||
9B7D804A2753783D003DAC0C /* SessionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B7D80492753783D003DAC0C /* SessionViewController.m */; };
|
9B7D804A2753783D003DAC0C /* SessionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B7D80492753783D003DAC0C /* SessionViewController.m */; };
|
||||||
@@ -459,6 +460,8 @@
|
|||||||
18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NIMTimeUtils.m; sourceTree = "<group>"; };
|
18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NIMTimeUtils.m; sourceTree = "<group>"; };
|
||||||
18EE3FF22750FA3700A452BF /* UIView+NIM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+NIM.h"; sourceTree = "<group>"; };
|
18EE3FF22750FA3700A452BF /* UIView+NIM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+NIM.h"; sourceTree = "<group>"; };
|
||||||
18EE3FF32750FA3700A452BF /* UIView+NIM.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+NIM.m"; sourceTree = "<group>"; };
|
18EE3FF32750FA3700A452BF /* UIView+NIM.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+NIM.m"; sourceTree = "<group>"; };
|
||||||
|
18EE40182754BA9F00A452BF /* NIMMessageMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIMMessageMaker.m; sourceTree = "<group>"; };
|
||||||
|
18EE40192754BA9F00A452BF /* NIMMessageMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMMessageMaker.h; sourceTree = "<group>"; };
|
||||||
7DB00EC07F1D0ADFF900B38D /* Pods-xplan-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-xplan-ios.debug.xcconfig"; path = "Target Support Files/Pods-xplan-ios/Pods-xplan-ios.debug.xcconfig"; sourceTree = "<group>"; };
|
7DB00EC07F1D0ADFF900B38D /* Pods-xplan-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-xplan-ios.debug.xcconfig"; path = "Target Support Files/Pods-xplan-ios/Pods-xplan-ios.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
9B0E1C5726E77022005D4442 /* BaseNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseNavigationController.h; sourceTree = "<group>"; };
|
9B0E1C5726E77022005D4442 /* BaseNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseNavigationController.h; sourceTree = "<group>"; };
|
||||||
9B0E1C5826E77022005D4442 /* BaseNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BaseNavigationController.m; sourceTree = "<group>"; };
|
9B0E1C5826E77022005D4442 /* BaseNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BaseNavigationController.m; sourceTree = "<group>"; };
|
||||||
@@ -1307,6 +1310,8 @@
|
|||||||
18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */,
|
18EE3FED2750CE6D00A452BF /* NIMMessageUtils.m */,
|
||||||
18EE3FEF2750D2AD00A452BF /* NIMTimeUtils.h */,
|
18EE3FEF2750D2AD00A452BF /* NIMTimeUtils.h */,
|
||||||
18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */,
|
18EE3FF02750D2AD00A452BF /* NIMTimeUtils.m */,
|
||||||
|
18EE40192754BA9F00A452BF /* NIMMessageMaker.h */,
|
||||||
|
18EE40182754BA9F00A452BF /* NIMMessageMaker.m */,
|
||||||
);
|
);
|
||||||
path = Message;
|
path = Message;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2381,6 +2386,7 @@
|
|||||||
18EE3FE22750C29D00A452BF /* NIMBadgeView.m in Sources */,
|
18EE3FE22750C29D00A452BF /* NIMBadgeView.m in Sources */,
|
||||||
E82EE0F8272FDDFA00D15DC1 /* UserPrivacyView.m in Sources */,
|
E82EE0F8272FDDFA00D15DC1 /* UserPrivacyView.m in Sources */,
|
||||||
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
|
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
|
||||||
|
18EE401A2754BA9F00A452BF /* NIMMessageMaker.m in Sources */,
|
||||||
E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */,
|
E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */,
|
||||||
E890BC0D273D09A50007C46B /* XPGiftCountView.m in Sources */,
|
E890BC0D273D09A50007C46B /* XPGiftCountView.m in Sources */,
|
||||||
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
|
E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */,
|
||||||
|
34
xplan-ios/Main/Message/NIMMessageMaker.h
Normal file
34
xplan-ios/Main/Message/NIMMessageMaker.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// NIMMessageMaker.h
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by zu on 2021/11/28.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <NIMSDK/NIMSDK.h>
|
||||||
|
|
||||||
|
@interface NIMMessageMaker : NSObject
|
||||||
|
|
||||||
|
+ (NIMMessage*)msgWithText:(NSString *)text;
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithAudio:(NSString *)filePath;
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithImage:(UIImage *)image;
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithImagePath:(NSString *)path;
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithImageData:(NSData *)data extension:(NSString *)extension;
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithVideo:(NSString *)filePath;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface NIMCommentMaker : NSObject
|
||||||
|
|
||||||
|
+ (NIMQuickComment *)commentWithType:(int64_t)type
|
||||||
|
content:(NSString *)content
|
||||||
|
ext:(NSString *)ext;
|
||||||
|
|
||||||
|
@end
|
114
xplan-ios/Main/Message/NIMMessageMaker.m
Normal file
114
xplan-ios/Main/Message/NIMMessageMaker.m
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
//
|
||||||
|
// NIMMessageMaker.m
|
||||||
|
// xplan-ios
|
||||||
|
//
|
||||||
|
// Created by zu on 2021/11/28.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NIMMessageMaker.h"
|
||||||
|
|
||||||
|
@implementation NIMMessageMaker
|
||||||
|
|
||||||
|
+ (NIMMessage*)msgWithText:(NSString*)text
|
||||||
|
{
|
||||||
|
NIMMessage *textMessage = [[NIMMessage alloc] init];
|
||||||
|
textMessage.text = text;
|
||||||
|
[self setupMessage:textMessage];
|
||||||
|
return textMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NIMMessage*)msgWithAudio:(NSString*)filePath
|
||||||
|
{
|
||||||
|
NIMAudioObject *audioObject = [[NIMAudioObject alloc] initWithSourcePath:filePath scene:NIMNOSSceneTypeMessage];
|
||||||
|
NIMMessage *message = [[NIMMessage alloc] init];
|
||||||
|
message.messageObject = audioObject;
|
||||||
|
message.text = @"发来了一段语音";
|
||||||
|
[self setupMessage:message];
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NIMMessage*)msgWithVideo:(NSString*)filePath
|
||||||
|
{
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
|
||||||
|
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
|
||||||
|
NIMVideoObject *videoObject = [[NIMVideoObject alloc] initWithSourcePath:filePath scene:NIMNOSSceneTypeMessage];
|
||||||
|
videoObject.displayName = [NSString stringWithFormat:@"视频发送于%@", dateString];
|
||||||
|
NIMMessage *message = [[NIMMessage alloc] init];
|
||||||
|
message.messageObject = videoObject;
|
||||||
|
message.apnsContent = @"发来了一段视频";
|
||||||
|
[self setupMessage:message];
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NIMMessage*)msgWithImage:(UIImage*)image
|
||||||
|
{
|
||||||
|
NIMImageObject *imageObject = [[NIMImageObject alloc] initWithImage:image scene:NIMNOSSceneTypeMessage];
|
||||||
|
NIMImageOption *option = [[NIMImageOption alloc] init];
|
||||||
|
option.compressQuality = 0.7;
|
||||||
|
imageObject.option = option;
|
||||||
|
return [NIMMessageMaker generateImageMessage:imageObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithImagePath:(NSString*)path
|
||||||
|
{
|
||||||
|
NIMImageObject * imageObject = [[NIMImageObject alloc] initWithFilepath:path scene:NIMNOSSceneTypeMessage];
|
||||||
|
return [NIMMessageMaker generateImageMessage:imageObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NIMMessage *)msgWithImageData:(NSData *)data extension:(NSString *)extension
|
||||||
|
{
|
||||||
|
NIMImageObject *imageObject = [[NIMImageObject alloc] initWithData:data extension:extension];
|
||||||
|
return [NIMMessageMaker generateImageMessage:imageObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NIMMessage *)generateImageMessage:(NIMImageObject *)imageObject
|
||||||
|
{
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
|
||||||
|
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
|
||||||
|
imageObject.displayName = [NSString stringWithFormat:@"图片发送于%@", dateString];
|
||||||
|
NIMMessage *message = [[NIMMessage alloc] init];
|
||||||
|
message.messageObject = imageObject;
|
||||||
|
message.apnsContent = @"发来了一张图片";
|
||||||
|
[self setupMessage:message];
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)setupMessage:(NIMMessage *)message
|
||||||
|
{
|
||||||
|
message.apnsPayload = @{
|
||||||
|
@"apns-collapse-id": message.messageId,
|
||||||
|
};
|
||||||
|
|
||||||
|
NIMMessageSetting *setting = [[NIMMessageSetting alloc] init];
|
||||||
|
setting.scene = NIMNOSSceneTypeMessage;
|
||||||
|
message.setting = setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NIMCommentMaker
|
||||||
|
|
||||||
|
+ (NIMQuickComment *)commentWithType:(int64_t)type
|
||||||
|
content:(NSString *)content
|
||||||
|
ext:(NSString *)ext
|
||||||
|
{
|
||||||
|
NIMQuickComment *comment = [[NIMQuickComment alloc] init];
|
||||||
|
comment.ext = ext;
|
||||||
|
NIMQuickCommentSetting *setting = [[NIMQuickCommentSetting alloc] init];
|
||||||
|
setting.needPush = YES;
|
||||||
|
setting.needBadge = YES;
|
||||||
|
setting.pushTitle = @"你收到了一条快捷评论";
|
||||||
|
setting.pushContent = content;
|
||||||
|
setting.pushPayload = @{
|
||||||
|
@"key" : @"value"
|
||||||
|
};
|
||||||
|
comment.setting = setting;
|
||||||
|
comment.replyType = type;
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -7,12 +7,18 @@
|
|||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#import "RoomHostDelegate.h"
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@protocol SendMessageViewDelegate <NSObject>
|
||||||
|
|
||||||
|
- (void)sendTextMessage:(NSString *)text;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@interface SendMessageView : UIView
|
@interface SendMessageView : UIView
|
||||||
|
|
||||||
|
@property (nonatomic, weak) id<SendMessageViewDelegate> delegate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -39,10 +39,12 @@
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Response
|
- (void)sendMessage:(UIButton *)sender {
|
||||||
|
if (self.delegate && [self.delegate respondsToSelector:@selector(sendTextMessage:)]) {
|
||||||
- (void)sendButtonDidClick:(UIButton *)sender {
|
[self.delegate sendTextMessage:self.inputView.text];
|
||||||
|
}
|
||||||
|
self.inputView.text = @"";
|
||||||
|
self.sendButton.enabled = self.inputView.text.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)keyboardWillShow:(NSNotification *)notification {
|
- (void)keyboardWillShow:(NSNotification *)notification {
|
||||||
@@ -179,7 +181,7 @@
|
|||||||
_sendButton.enabled = NO;
|
_sendButton.enabled = NO;
|
||||||
_sendButton.layer.cornerRadius = 5.0;
|
_sendButton.layer.cornerRadius = 5.0;
|
||||||
_sendButton.layer.masksToBounds = YES;
|
_sendButton.layer.masksToBounds = YES;
|
||||||
[_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside];
|
[_sendButton addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
}
|
}
|
||||||
return _sendButton;
|
return _sendButton;
|
||||||
}
|
}
|
||||||
|
@@ -9,11 +9,13 @@
|
|||||||
#import "MessageCell.h"
|
#import "MessageCell.h"
|
||||||
#import "SendMessageView.h"
|
#import "SendMessageView.h"
|
||||||
#import "UITableView+NIMScrollToBottom.h"
|
#import "UITableView+NIMScrollToBottom.h"
|
||||||
|
|
||||||
|
#import "NIMMessageMaker.h"
|
||||||
#import "XPMacro.h"
|
#import "XPMacro.h"
|
||||||
|
|
||||||
#import <Masonry/Masonry.h>
|
#import <Masonry/Masonry.h>
|
||||||
|
|
||||||
@interface SessionViewController ()<UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate>
|
@interface SessionViewController ()<UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate, SendMessageViewDelegate>
|
||||||
|
|
||||||
@property (nonatomic, strong) NIMSession * session;
|
@property (nonatomic, strong) NIMSession * session;
|
||||||
@property (nonatomic, strong) NSMutableArray<NIMMessage *> * messages;
|
@property (nonatomic, strong) NSMutableArray<NIMMessage *> * messages;
|
||||||
@@ -73,9 +75,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)initData {
|
- (void)initData {
|
||||||
NSArray<NIMMessage *> *messages = [[[NIMSDK sharedSDK] conversationManager] messagesInSession:self.session
|
NSArray<NIMMessage *> *messages = [[NIMSDK sharedSDK].conversationManager messagesInSession:self.session message:nil limit:1000];
|
||||||
message:nil
|
|
||||||
limit:1000];
|
|
||||||
[self.messages addObjectsFromArray:messages.copy];
|
[self.messages addObjectsFromArray:messages.copy];
|
||||||
[self.sessionTableView reloadData];
|
[self.sessionTableView reloadData];
|
||||||
[self.sessionTableView nim_scrollToBottom:NO];
|
[self.sessionTableView nim_scrollToBottom:NO];
|
||||||
@@ -131,12 +131,24 @@
|
|||||||
[[NIMSDK sharedSDK].conversationManager markAllMessagesReadInSession:self.session];
|
[[NIMSDK sharedSDK].conversationManager markAllMessagesReadInSession:self.session];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error {
|
||||||
|
[self.messages addObject:message];
|
||||||
|
[self.sessionTableView reloadData];
|
||||||
|
[self.sessionTableView nim_scrollToBottom:YES];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - NIMConversationManagerDelegate
|
#pragma mark - NIMConversationManagerDelegate
|
||||||
- (void)messagesDeletedInSession:(NIMSession *)session {
|
- (void)messagesDeletedInSession:(NIMSession *)session {
|
||||||
[self.messages removeAllObjects];
|
[self.messages removeAllObjects];
|
||||||
[self initData];
|
[self initData];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - SendMessageViewDelegate
|
||||||
|
- (void)sendTextMessage:(NSString *)text {
|
||||||
|
NIMMessage *message = [NIMMessageMaker msgWithText:text];
|
||||||
|
[[[NIMSDK sharedSDK] chatManager] sendMessage:message toSession:self.session error:nil];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSArray<NIMMessage *> *)messages {
|
- (NSArray<NIMMessage *> *)messages {
|
||||||
if (!_messages) {
|
if (!_messages) {
|
||||||
_messages = [[NSMutableArray alloc] init];
|
_messages = [[NSMutableArray alloc] init];
|
||||||
@@ -166,6 +178,7 @@
|
|||||||
- (SendMessageView *)sendMessageView {
|
- (SendMessageView *)sendMessageView {
|
||||||
if (!_sendMessageView) {
|
if (!_sendMessageView) {
|
||||||
_sendMessageView = [[SendMessageView alloc] init];
|
_sendMessageView = [[SendMessageView alloc] init];
|
||||||
|
_sendMessageView.delegate = self;
|
||||||
}
|
}
|
||||||
return _sendMessageView;
|
return _sendMessageView;
|
||||||
}
|
}
|
||||||
|
@@ -238,7 +238,7 @@
|
|||||||
_sendButton.enabled = NO;
|
_sendButton.enabled = NO;
|
||||||
_sendButton.layer.cornerRadius = 5.0;
|
_sendButton.layer.cornerRadius = 5.0;
|
||||||
_sendButton.layer.masksToBounds = YES;
|
_sendButton.layer.masksToBounds = YES;
|
||||||
[_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside];
|
[_sendButton addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
}
|
}
|
||||||
return _sendButton;
|
return _sendButton;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user