forked from germc/Atlas-iOS
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ATLMessageInputToolbar.h
186 lines (153 loc) · 6.24 KB
/
ATLMessageInputToolbar.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
//
// ATLUIMessageInputToolbar.h
// Atlas
//
// Created by Kevin Coleman on 9/18/14.
// Copyright (c) 2015 Layer. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import <UIKit/UIKit.h>
#import "ATLMessageComposeTextView.h"
#import "ATLMediaAttachment.h"
@class ATLMessageInputToolbar;
extern NSString *const ATLMessageInputToolbarDidChangeHeightNotification;
extern NSString *const ATLMessageInputToolbarAccessibilityLabel;
//---------------------------------
// Message Input Toolbar Delegate
//---------------------------------
/**
@abstract The `ATLMessageInputToolbarDelegate` notifies its receiver when buttons have been
tapped.
*/
@protocol ATLMessageInputToolbarDelegate <NSObject>
/**
@abstract Notifies the receiver that the right accessory button was tapped.
*/
- (void)messageInputToolbar:(ATLMessageInputToolbar *)messageInputToolbar didTapRightAccessoryButton:(UIButton *)rightAccessoryButton;
/**
@abstract Notifies the receiver that the left accessory button was tapped.
*/
- (void)messageInputToolbar:(ATLMessageInputToolbar *)messageInputToolbar didTapLeftAccessoryButton:(UIButton *)leftAccessoryButton;
@optional
/**
@abstract Notifies the receiver that typing has occurred.
*/
- (void)messageInputToolbarDidType:(ATLMessageInputToolbar *)messageInputToolbar;
/**
@abstract Notifies the receiver that typing has ended.
*/
- (void)messageInputToolbarDidEndTyping:(ATLMessageInputToolbar *)messageInputToolbar;
@end
/**
@abstract The `ATLMessageInputToolbar` provides a lightweight and customizable class
that is similar to the message input toolbar in Messages.
@discussion The class displays two customizable `UIButton` objects separated by a message input text view.
Instances are automatically resized in response to user or system input. The view also
caches any content provided and exposes that content back to a consuming object via the
mediaAttachments property.
*/
@interface ATLMessageInputToolbar : UIToolbar
//------------------------------
// Content Display Methods
//------------------------------
/**
@abstract Inserts the mediaAttachment as an attributed text attachment which is inlined with text.
@param mediaAttachment The `ATLMediaAttachment` instance containing information about the media.
@param endLineBreak A `BOOL` which if `YES` inserts a new line after the media attachment insertion.
@discussion The view will automatically resize the attachment's thumbnail and itself to comfortably
fit the thumbnail content. The image will also be cached and is accessible via the mediaAttachments
property.
*/
- (void)insertMediaAttachment:(ATLMediaAttachment *)mediaAttachment withEndLineBreak:(BOOL)endLineBreak;
//-----------------------------
// UI Customization
//-----------------------------
/**
@abstract The left accessory button for the view.
@discussion By default, the button displays a camera icon. If set to `nil` the `textInputView` will expand to the left edge of the toolbar.
*/
@property (nonatomic) UIButton *leftFirstAccessoryButton;
@property (nonatomic) UIButton *leftAccessoryButton;
/**
@abstract The right accessory button for the view.
*/
@property (nonatomic) UIButton *rightAccessoryButton;
/**
@abstract The right accessory button title.
@discussion By default, the title is "Send".
*/
@property (nonatomic) NSString *rightAccessoryButtonTitle;
/**
@abstract The font color for the right accessory button in active state.
*/
@property (nonatomic) UIColor *rightAccessoryButtonActiveColor UI_APPEARANCE_SELECTOR;
/**
@abstract The font color for the right accessory button in disabled state.
*/
@property (nonatomic) UIColor *rightAccessoryButtonDisabledColor UI_APPEARANCE_SELECTOR;
/**
@abstract The font for the right accessory button.
*/
@property (nonatomic) UIFont *rightAccessoryButtonFont UI_APPEARANCE_SELECTOR;
/**
@abstract The image displayed on left accessory button.
@default A `camera` icon.
*/
@property (nonatomic) UIImage *leftAccessoryImage,*leftFirstAccessoryImage;
/**
@abstract The image displayed on right accessory button.
@default A `location` icon.
*/
@property (nonatomic) UIImage *rightAccessoryImage;
/**
@abstract Determines whether or not the right accessory button displays an icon.
@disucssion If NO, the right accessory button will display the text `SEND` at all times.
@default YES
*/
@property(nonatomic) BOOL displaysRightAccessoryImage;
/**
@abstract An automatically resizing message composition field.
*/
@property (nonatomic) ATLMessageComposeTextView *textInputView;
/**
@abstract The margin on top and bottom of the textInputView.
@default 7.0f.
*/
@property (nonatomic) CGFloat verticalMargin;
/**
@abstract The delegate object for the view.
*/
@property (nonatomic, weak) id<ATLMessageInputToolbarDelegate> inputToolBarDelegate;
/**
@abstract The maximum number of lines of next to be displayed.
@default 8
@discussion The text view will stop growing once the maximum number of lines are displayed. It
will scroll its text view to keep the latest content visible.
*/
@property (nonatomic) NSUInteger maxNumberOfLines;
/**
@abstract An array of all media attachments displayed in the text view.
@discussion Any existing media attachments will be removed when the right accessory button is tapped.
*/
@property (nonatomic, readonly) NSArray *mediaAttachments;
//-------------------
// Layout Accessories
//-------------------
/**
@abstract The view controller whose input accessory view is the `ATLMessageInputToolbar`.
@discussion This property is set internally in the `ATLBaseConversationViewController` to change the view's frame
to support UISplitViewController usage. This property should only be set when subclassing `ATLMessageInputToolbar`.
*/
@property (nonatomic, weak) UIViewController *containerViewController;
@end