您的位置:首页 > Web前端 > JavaScript

我看JSQMessageViewController的笔记

2016-01-21 18:34 507 查看
一,配置cocoa pods

1、升级Ruby环境

终端输入:$gem
update --system若有报错(没有权限去更新ruby),$sudo
gem update —system来进行升级,出行RubyGems system software updated 表示升级完成

2、安装CocoaPods

  2.1使用淘宝镜像:

$ gem sources --remove https://rubygems.org/  

//等有反应之后再敲入以下命令  

$ gem sources -a https://ruby.taobao.org/  

查看是否验证成功:$ gem sources -l 

正确的输出:

*** CURRENT SOURCES ***  

  
http://ruby.taobao.org/  
安装:

$ sudo gem install cocoapods  

安装结束后:

$ pod setup

问题:路径问题:

 

$ rvm use ruby-1.9.3-p448 

3、配置Podfile文件

3.1 cd 文件夹

3.2 touch Podfile 或vim Podfile

3.3 编辑好后 如:

platform:ios, ‘7.0‘

$ pod
‘AFNetworking‘, ‘~> 2.3.1‘

按esc键和:wq完成保存并退出
3.4 pod install

4、更新CocoaPods

$ sudo gem install cocoapods  
5、使用search命令
e.g.: pod search
AFNetworking

6、编译从github上checkout下来已包含cocopods类库的项目?

$ pod update

7、
删除工程文件夹下的Podfile、Podfile.lock及Pods文件夹
删除xcworkspace文件
使用xcodeproj文件打开工程,删除Frameworks组下的Pods.xcconfig及libPods.a引用
在工程设置中的Build Phases下删除Check Pods Manifest.lock及Copy Pods Resources


二、在storyboard中
配置好如图二-1所示:



图二-1

包含storyboard和代码编写的push,模态跳转至聊天界面,在模态跳转中,DemoMessagesViewController制定了协议一JSQDemoViewControllerDelegate,TableViewController遵守协议一,

三、主体理解

独立的协议有:

1.@protocol SYHMessageData <NSObject>

2.@protocol SYHMessagesCollectionViewDataSource <UICollectionViewDataSource>

3.@protocol SYHMessagesCollectionViewDelegateFlowLayout <UICollectionViewDelegateFlowLayout>

4.@protocol JSQMessageMediaData <NSObject>

5.@protocol JSQMessagesBubbleSizeCalculating <NSObject>

包含协议的:
在@interface SYHMessagesCollectionView :UICollectionView 中,包含这些协议,(相当于制订了这些协议),即

@property (nonatomic,weak)id<SYHMessagesCollectionViewDataSource>
dataSource;

@property (nonatomic,weak)id<SYHMessagesCollectionViewDelegateFlowLayout>
delegate;
注意点一:为了避免重命名,需
@dynamic dataSource;
@dynamic delegate;

以下这些类中自定义了协议:

1.@class JSQMessagesCollectionViewCell;
@protocol JSQM
daf0
essagesCollectionViewCellDelegate <NSObject>

@end
@interface JSQMessagesCollectionViewCell :UICollectionViewCell

@property (weak,nonatomic)id<JSQMessagesCollectionViewCellDelegate>
delegate;

2.@class SYHMessagesInputToolbar;
@protocol SYHMessagesInputToolbarDelegate <UIToolbarDelegate>

@end
@interface SYHMessagesInputToolbar :UIToolbar

@property (nonatomic,weak)id<SYHMessagesInputToolbarDelegate>
delegate;

@property (nonatomic,weak,readonly)SYHMessagesToolbarContentView
*contentView;

结构层次inputToolbar:

@interface SYHMessagesToolbarContentView :UIView

@property (nonatomic,weak,readonly)SYHMessagesComposerTextView
*textView;
即:SYHMessagesInputToolbar --->SYHMessagesToolbarContentView --->SYHMessagesComposerTextView

3.@class JSQMessagesComposerTextView;
@protocol JSQMessagesComposerTextViewPasteDelegate <NSObject>

@end
@interface JSQMessagesComposerTextView :UITextView

@property (weak,nonatomic)id<JSQMessagesComposerTextViewPasteDelegate>
pasteDelegate;

4.@class JSQMessagesKeyboardController;
@protocol JSQMessagesKeyboardControllerDelegate <NSObject>

@end

@property (weak,nonatomic)id<JSQMessagesKeyboardControllerDelegate>
delegate;

5.@class JSQMessagesLoadEarlierHeaderView;
@protocol JSQMessagesLoadEarlierHeaderViewDelegate <NSObject>

@end

@property (weak,nonatomic)id<JSQMessagesLoadEarlierHeaderViewDelegate>
delegate;

遵守协议的:

在.h中

@interface SYHMessagesVC :UIViewController <SYHMessagesCollectionViewDataSource,SYHMessagesCollectionViewDelegateFlowLayout>

在.m中

@interface
SYHMessagesVC ()<SYHMessagesInputToolbarDelegate>

- (void)viewDidLoad中,
1初始化xib
2配置viewController的内容,设置collectionView的datasource,delegate和inputToolbar的代理方法,配置键盘的位置,键盘的代理,更新collectionView的大小。用到分类;#import"NSBundle+SYHMessages.h"用在了textview的placeHolder中;
3.注册键盘和uimenu的通知;



- (void)viewWillAppear:(BOOL)animated中,实现以下:

1.断言senderId和senderDisplayName不为空;
2自定义的collectionViewLayout开始布局
3如果允许一开始显示的时候就显示最新的信息,就开启一个线程滚动:注意有3种情况,需要比较新消息和显示消息的。。。。。。。。。。。。。。
4.更新键盘上的点击点


- (void)viewDidAppear:(BOOL)animated中实现
1,增加观察者,kvo监听textView
2.增加手势;并相应手势的点击事件;
3.keyboard成为第一响应者;
4,如果ios8.0之前的话,把截屏移除;


- (void)viewDidDisappear:(BOOL)animated中实现
1.取消手势
2,移除观察着
3,keyboard失去第一响应

完成协议的代理方法
在SYHMessagesCollectionViewDataSource中,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: