Files
TIMSDK/iOS/TUIKit/TUIChat/UI/Input/TUIInputBar.h
T
2021-12-10 17:49:14 +08:00

218 lines
7.8 KiB
Objective-C

/******************************************************************************
*
* 本文件声明了 TTextViewDelegate 协议和 TUIInputBar 类。
* TUI 输入条,用于检测、获取用户输入的 UI 组件。
* TUIInputBar,即位于聊天消息最下方的 UI 组件。包括文本输入框、表情按钮、语音按钮和“+”按钮(“更多”按钮)。
* TTextViewDelegate 提供了输入条各种情况下的回调委托,包括点击输入条的表情、“更多”视图、语音按钮的回调。以及发送消息、发送语音、更改输入高度的回调。
*
******************************************************************************/
#import <UIKit/UIKit.h>
#import "TUIResponderTextView.h"
@class TUIInputBar;
/////////////////////////////////////////////////////////////////////////////////
//
// TTextViewDelegate
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 输入条的回调委托
* 本委托包含输入条各种情况下的对于各种事件的回调。
*/
@protocol TTextViewDelegate <NSObject>
/**
* 点击表情按钮,即“笑脸”后的回调委托。
* 您可以通过该回调实现:点击表情按钮后,显示出对应的表情视图。
*
* @param textView 委托者,当前与用户交互的 InputBar。
*/
- (void)inputBarDidTouchFace:(TUIInputBar *)textView;
/**
* 点击更多按钮,即“+”后的回调委托。
* 您可以通过该回调实现:相应用户的点击操作,显示出对应的更多视图。
*
* @param textView 委托者,当前与用户交互的 InputBar。
*/
- (void)inputBarDidTouchMore:(TUIInputBar *)textView;
/**
* 点击语音按钮,即“声波”图标后的回调委托。
* 您可以通过该回调实现:显示出相应的操作提示视图,并开始语音的录制采集。
*
* @param textView 委托者,当前与用户交互的 InputBar。
*/
- (void)inputBarDidTouchVoice:(TUIInputBar *)textView;
/**
* 输入条高度更改时的回调委托
* 当您点击语音按钮、表情按钮、“+”按钮或者呼出/收回键盘时,InputBar 高度会发生改变时,执行该回调
* 您可以通过该回调实现:通过该回调函数进行 InputBar 高度改变时的 UI 布局调整。
* 在 TUIKit 默认的实现中,本回调函数在处理了表情视图与更多视图的浮现后,进一步调用了 TUIInputController 中的 didChangeHeight 委托进行 UI 布局的高度调整。
*
* @param textView 委托者,当前与用户交互的 InputBar。
* @param offset 输入条高度改变的偏移量。
*/
- (void)inputBar:(TUIInputBar *)textView didChangeInputHeight:(CGFloat)offset;
/**
* 发送文本消息时的回调委托。
* 当您通过 InputBar 发送文本消息(通过键盘点击发送时),执行该回调函数。
* 您可以通过该回调实现:获取 InputBar 的内容,并将消息进行发送。
* 在 TUIKit 默认的实现中,本回调函数在处理了表情视图与更多视图的浮现后,进一步调用了 TUIInputController 中的 didSendMessage 委托进行消息发送的进一步逻辑处理。
*
* @param textView 委托者,当前与用户交互的 InputBar。
* @param text 点击发送时,当前 InputBar 中的文本消息。
*/
- (void)inputBar:(TUIInputBar *)textView didSendText:(NSString *)text;
/**
* 发送语音后的回调委托
* 当您长按语音按钮并松开时,执行该回调函数。
* 您可以通过该回调实现:对录制到的语音信息进行处理并发送该语音消息。
* 在 TUIKit 默认的实现中,本回调函数在处理了表情视图与更多视图的浮现后,进一步调用了 TUIInputController 中的 didSendMessage 委托进行消息发送的进一步逻辑处理。
*
* @param textView 委托者,当前与用户交互的 InputBar。
* @param path 松开语音按钮时,当前录制的语音所在的路径。
*/
- (void)inputBar:(TUIInputBar *)textView didSendVoice:(NSString *)path;
/**
* 输入含有 @ 字符的委托
*
* @param textView 委托者,当前与用户交互的 InputBar。
*/
- (void)inputBarDidInputAt:(TUIInputBar *)textView;
/**
* 删除含有 @ 字符的委托(比如删除 @xxx)
*
* @param textView 委托者,当前与用户交互的 InputBar。
*/
- (void)inputBar:(TUIInputBar *)textView didDeleteAt:(NSString *)text;
/**
* 点击键盘按钮后的回调委托
* 点击表情按钮后,对应位置的“笑脸”会变成“键盘”图标,此时为键盘按钮。
* 您可以通过该回调实现:隐藏当前显示的表情视图或者更多视图,并浮现键盘。
*
* @param textView 委托者,当前与用户交互的 InputBar。
*/
- (void)inputBarDidTouchKeyboard:(TUIInputBar *)textView;
/**
* 点击键盘上的删除按钮
*/
- (void)inputBarDidDeleteBackward:(TUIInputBar *)textView;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// TUIInputBar
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 【模块名称】TUIInputBar
* 【功能说明】TUI 输入条,用于检测、获取用户输入的 UI 组件。
* 输入条,即位于聊天消息最下方的 UI 组件。包括文本输入框、表情按钮、语音按钮和“+”按钮(“更多”按钮)。
* 本类配合上述声明的回调委托,能够响应多种交互事件,包括点击输入条的表情、“更多”视图、语音按钮。以及发送消息、发送语音、更改输入高度等。
* 本类不仅是实现了一个文本输入框中的业务逻辑,同时也是表情、more、和语音视图的逻辑入口。
*/
@interface TUIInputBar : UIView
/**
* 线视图
* 在视图中的分界线,使得 InputBar 与其他视图在视觉上区分,从而让 InputBar 在显示逻辑上更加清晰有序。
*/
@property (nonatomic, strong) UIView *lineView;
/**
* 语音按钮
* 即在输入条最右侧的,具有“音波”图标的按钮。
*/
@property (nonatomic, strong) UIButton *micButton;
/**
* 键盘按钮
* 即点击表情按钮(“笑脸”)后,笑脸变化后的按钮。
*/
@property (nonatomic, strong) UIButton *keyboardButton;
/**
* 文本输入视图
* 即在输入条中占据大部分面积的白色文本输入框
* 继承自 UITextView
*/
@property (nonatomic, strong) TUIResponderTextView *inputTextView;
/**
* 表情按钮
* 即在输入条中的“笑脸”按钮。
* 对应回调委托中的表情按钮回调。
*/
@property (nonatomic, strong) UIButton *faceButton;
/**
* 更多按钮
* 即在输入条中的“+”号按钮。
* 对应回调委托中的“更多”按钮回调。
*/
@property (nonatomic, strong) UIButton *moreButton;
/**
* 录音按钮
* 在您点击了语音按钮(“声波图标”)后,原本的文本输入框会变成改按钮。
* 您可以引导用户点击该按钮开始语音的录制,并通过本按钮的回调函数实现声音的录制。
*/
@property (nonatomic, strong) UIButton *recordButton;
/**
* 实现 TTextViewDelegate 协议的委托。
*/
@property (nonatomic, weak) id<TTextViewDelegate> delegate;
/**
* 添加表情
* 用于实现在当前文本输入框中输入 emoji
*
* @param emoji 需要输入的表情的字符串表示形式。
*/
- (void)addEmoji:(NSString *)emoji;
/**
* 删除函数
* 删除当前文本输入框中最右侧的字符(替换为“”)。
*/
- (void)backDelete;
/**
* 清空整个文本输入框中的内容(替换为“”)。
*/
- (void)clearInput;
/**
* 获取文本输入框中的内容。
*
* @return 以字符串形式返回当前输入框中的内容。
*/
- (NSString *)getInput;
/**
* 更新 textView 坐标
*/
- (void)updateTextViewFrame;
/**
* 切换到键盘
*/
- (void)changeToKeyboard;
@end