本节主要仿照环信demo来创建demo的界面。
我们在使用环信的demo可以看到环信的整个界面框架是UITabBarController
作为主控制器,里面装了会话ConversationListController
、通讯录ContactListViewController
和设置SettingsViewController
这三个控制器。现在我们来创建这三个控制器。
创建ConversationListController
我们通过环信demo可以看到,ConversationListController
是继承于EaseConversationListViewController
,而EaseConversationListViewController
是继承于EaseRefreshTableViewController
的,现在我们先来研究下EaseRefreshTableViewController
是怎么实现的。
EaseRefreshTableViewController的实现
我们在做项目的时候,tableView 下拉刷新和上拉加载更多是经常使用的功能,而MJRefresh
的上拉刷新是使用最频繁的第三方类,但是,如果我们在每个界面的tableView上添加MJRefresh
的相关代码,就会造成代码重复,所以最好能写一个基类,让凡是带有tableview的控制器继承于这个基类,这个子类就能自动带有MJRefresh
的相关功能,而EaseRefreshTableViewController
就是这么实现的。下面附上部分EaseRefreshTableViewController
的代码。
#import <UIKit/UIKit.h>
#define KCELLDEFAULTHEIGHT 50
@interface EaseRefreshTableViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
{
NSArray *_rightItems;
}
@property (strong, nonatomic) NSArray *rightItems;
@property (strong, nonatomic) UIView *defaultFooterView;
@property (strong, nonatomic) UITableView *tableView;
@property (strong, nonatomic) NSMutableArray *dataArray;
@property (strong, nonatomic) NSMutableDictionary *dataDictionary;
@property (nonatomic) int page;
@property (nonatomic) BOOL showRefreshHeader;//是否支持下拉刷新
@property (nonatomic) BOOL showRefreshFooter;//是否支持上拉加载
@property (nonatomic) BOOL showTableBlankView;//是否显示无数据时默认背景
- (instancetype)initWithStyle:(UITableViewStyle)style;
- (void)tableViewDidTriggerHeaderRefresh;//下拉刷新事件
- (void)tableViewDidTriggerFooterRefresh;//上拉加载事件
- (void)tableViewDidFinishTriggerHeader:(BOOL)isHeader reload:(BOOL)reload;
@end
具体的实现可以看项目的源代码,路径是:chatDemo-UI3.0 ->EaseUI -> EMUKit ->ViewController ->EaseRefreshTableViewController.h
EaseRefreshTableViewController
这部分的代码帮我们封装了界面刷新和数据为空时候的逻辑代码,我们在做其他的项目的时候可以借鉴一下,能够帮我们省下不少的代码。
EaseConversationListViewController的实现
EaseConversationListViewController
继承于EaseRefreshTableViewController
,具有上拉刷新等MJRefresh相关功能,并重写了tableViewDidTriggerHeaderRefresh
这个方法。具体的实现大家去看下ChatDemo-UI3.0
的源码吧。
ConversationListController的实现
ConversationListController
继承于EaseConversationListViewController
,是会话列表的控制器,这里我们为了演示,仅仅完善其中的界面,一些逻辑代码暂时省略。