用TableView实现聊天对话框

本文介绍了如何使用UITableView来实现类似QQ、微信等聊天应用的对话框效果。主要内容包括:动态调整对话框高度以适应文本数量,设置对话框为可点击按钮并实现背景拉伸,处理toolbar中的textfield和button以适应键盘显示,以及输入后的清理和数据刷新操作。通过创建Message类存储对话消息,并详细说明了计算文本高度、设置按钮缩进以及处理键盘遮挡问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值