[XMPP]iOS聊天软件学习笔记[四]
昨天完成了聊天界面,基本功能算告一段落
开发时间:五天(工作时间)
开发工具:xcode6
开发平台:iOS8
XMPP框架:XMPPFramework
git clone https://github.com/robbiehanson/XMPPFramework.git
界面设计:使用StoryBoard
github地址:https://github.com/hjandyz/XMPP
1.关于socket在后台的运行,iOS8可以直接使用(但是我自由在模拟器成功,真机不知为何不可以),ios7的话需要配置
其实很方便,初始化xmppstream以后
_XMPPStream.enableBackgroundingOnSocket = YES;
然后修改plist文件

2.获得后台运行的权限以后我们就可以接收到message了
#pragma mark 接收到好友消息
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
//判断是否在前台
if([UIApplication sharedApplication].applicationState != UIApplicationStateActive){
HJLog(@"后台");
UILocalNotification *localNoti = [[UILocalNotification alloc] init];
localNoti.alertBody = [NSString stringWithFormat:@"%@:%@",message.fromStr,message.body];
localNoti.soundName = @"default";
[[UIApplication sharedApplication] scheduleLocalNotification:localNoti];
}
}
当然iOS8要注册一下通知,用户允许才能发通知给用户
//注册应用接受通知
if([[UIDevice currentDevice].systemVersion doubleValue] > 8.0){
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:setting];
}
3.发消息的时可以自己在xml文件中加入body,这样子可以区分图片声音还是文字或者其他格式
- (void)shendMessage:(NSString *)text bodyType:(NSString *)bodyType
{
XMPPMessage *message = [XMPPMessage messageWithType:@"chat" to:self.friendJid];
[message addAttributeWithName:@"chatType" stringValue:bodyType];
[message addBody:text];
[[HJXMPPTool sharedHJXMPPTool].XMPPStream sendElement:message];
}
4.一些小方法,为了显示新的消息自动混动到底部,用户拖动scrollView时候隐藏键盘
#pragma mark - 滚动到底部
- (void)scrollToTableViewBotton
{
NSInteger lastRow = _resultController.fetchedObjects.count - 1;
if (lastRow < 0) {
return;
}
NSIndexPath *path = [NSIndexPath indexPathForRow:lastRow inSection:0];
[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.view endEditing:YES];
}
3.通过的到contentSize来让输入框最多变高成三行
#pragma mark - textView delegate
- (void)textViewDidChange:(UITextView *)textView
{
CGFloat contentH = textView.contentSize.height;
// NSLog(@"%f",size.height);
if (contentH > 33 && contentH < 67) {
self.inputViewHeightConstraint.constant = contentH + 18;
}
NSString *text = textView.text;
if([text rangeOfString:@"\n"].length != 0){
//去除换行字符
text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[self shendMessage:text bodyType:@"text"];
textView.text = nil;
self.inputViewHeightConstraint.constant = 50;
}
}
4.用代码实现自动布局(VLF)也是很有用的
#warning 代码实现自动布局,要设置下面为NO
tableView.translatesAutoresizingMaskIntoConstraints = NO;
//自动布局 VFL
NSDictionary *views = @{@"tableView":tableView, @"inputView":inputView};
NSArray *tableHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[tableView]-0-|" options:0 metrics:nil views:views];
[self.view addConstraints:tableHConstraints];
NSArray *inputHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[inputView]-0-|" options:0 metrics:nil views:views];
[self.view addConstraints:inputHConstraints];
NSArray *vConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[tableView]-0-[inputView(50)]-0-|" options:0 metrics:nil views:views];
[self.view addConstraints:vConstraints];
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
[XMPP]iOS聊天软件学习笔记[四]的更多相关文章
- [XMPP]iOS聊天软件学习笔记[一]
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- [XMPP]iOS聊天软件学习笔记[三]
今天做了好友界面,其实xmpp内部已经写好很多扩展模块,所以使用起来还是很方便的 开发时间:五天(工作时间) 开发工具:xcode6 开发平台:iOS8 XMPP框架:XMPPFramework gi ...
- [XMPP]iOS聊天软件学习笔记[二]
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 【转】ios蓝牙开发学习笔记(四)ios蓝牙应用的后台处理 -- 不错
原文网址:http://dev.ailab.cn/article-1038-220511-1.html 默认情况下,当应用进入后台或挂起时,蓝牙任务是不执行的.但是,你可以把应用声明为支持蓝牙后台执行 ...
- Java超简明入门学习笔记(四)
Java编程思想第4版学习笔记(四) 第六章 访问权限控制 访问权限控制是面向对象编程中的重要概念,它划分了类设计者和类使用者的界限.通过设置权限,它一方面告诉类设计者,哪个部分的修改 ...
- JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
随机推荐
- 如何在word中写出赏心悦目的代码
短学期的VHDL终于结束了,虽然代码并不是很难,但是框框条条的规矩很多,也算折腾了一会,最后要写一个技术手册,结题报告类似物.考虑到word毕竟套主题比较方便,所以也就没有用LaTeX写,但是很快就发 ...
- The JRE could not be found.Edit the server and change the JRE location.
之前更改了了一个较低的jdk的版本看了看一个项目的代码,不知所云,然后再改回来, 混乱之中只要启动Tomcat就出现这种错误,还是无法找到JRE,最后如此解决: 在Windows->Prefer ...
- N年之后,只记得三井寿!而我们程序猿们也要加油珍惜时间!
[感觉程序员看一篇励志文章效果大于6篇技术文章,3份源码下载.....所以上此文] [说明:本文不少段落是摘自别人文章,因为本人写程序的文笔有限,怕感动不了大家,所以摘取了不错的部分] 前段时间重新看 ...
- LibSvm介绍---调用方法及参数介绍
libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.82 libsvm命名空间下主要使用类: svm_model 为模型类,通过训练或加载训练 ...
- 一颗 45nm CPU的制造过程
沙子 :硅是地壳内第二丰富的元素,而脱氧后的沙子(尤其是石英)最多包含25%的硅元素,以二氧化硅(SiO2)的形式存在,这也是半导体制造产业的基础. 硅熔炼: 12英寸/300毫米晶圆级,下同.通过多 ...
- Pro Android 4 第六章 构建用户界面以及使用控件(一)
目前为止,我们已经介绍了android的基础内容,但是还没开始接触用户界面(UI).本章我们将开始探讨用户界面和控件.我们先讨论一下android中UI设计的一般原理,然后我们在介绍一下an ...
- mysql use mysql hang
uat-db03:/root# mysql -A -uroot -p1234567 Warning: Using a password on the command line interface ca ...
- 如何在程序中调用Caffe做图像分类
Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的 ...
- Oracle varchar 字段排序问题
数据库字段: 想要的结果: 实际查询的结果: 解决方法:使用CAST函数把varchar2转为int类型 order by CAST(CODE AS INTEGER)
- 2014 BDTC 參会有感
中国大数据技术大会(Big Data Technology Conference,BDTC)是眼下国内最具影响.规模最大的大数据领域的技术盛会. 大会的前身是Hadoop中国云计算大会(Hadoop ...