用tableView可实现如QQ,飞信,微信等聊天软件的对话框效果。
要实现如图功能要解决以下几个问题:
1.对话框的高度能随着文本的多少动态变化,如果字数少于一行能存放的最大字数还要调整对话框的宽度,如果对话框的文字太少要保证对话框至少要与头像照片一样高
2.对话框是一个button,要完成对话框的背景的拉伸,使之与文字适合,点击对话框有高亮显示
3.要在toolbar中加入textfield与button,点击textfield键盘弹出后要动态调整toolbar高度使textfield不会被键盘遮挡
4.完成输入后键盘取消第一响应,textfield需要清空,tableView重新加载数据并滚动到最后一个cell
准备工作在storyboard中只需加入navigation controller并把viewController设置为rootViewController就完成工作,其他的部分全部用代码实现。包括tableView的生成cell的数据的载入全部用代码就可以实现。
为了展示效果先从字典中加载部分数据。
我定义了一个Message类来存放对话消息,定义字符串message存放内容,isMine来判断是我自己发的信息还是对方发的信息
Message.h
#import <Foundation/Foundation.h>
@interface Message : NSObject
@property(nonatomic,strong)NSString *message;
@property(nonatomic,assign)BOOL isMine;
@end
头文件viewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>
@property(strong,nonatomic)UITableView *tableView;
@property(strong,nonatomic)NSMutableArray *dialogMessages;
@property(nonatomic,strong) UITextField *myTextField;
@property(nonatomic,strong) UIToolbar *myToolbar;
@property(nonatomic,strong) UIButton *myButton;
@end
里面定义了tableView,用来输入数据的myTextField,点击响应发送信息的myButton,和存放myTextField与myButton的myToolbar,最后是用来存储用于tableViewCell中的数据的数组dialogMessage。其中在头文件中一定不能忘记包含下面的委托,否则不能使用系统函数。
<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>
读取字典中的数据
const NSString *MsgKey = @"msg";
const NSString *MineKey = @"ismine";
NSString *path = [[NSBundle mainBundle] pathForResource:@"messages" ofType:@"plist"];
NSArray *dataArray = [NSArray arrayWithContentsOfFile:path];
[dataArray enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) {
Message *message = [[Message alloc] init];
message.message = dict[MsgKey];
message.isMine = [dict[MineKe