ios 微信细节
1、登录后,下次登录保存其用户名。
* 官方的登录实现
* 1.把用户名和密码放在沙盒
NSString *user = self.userField.text;
NSString *pwd = self.pwdField.text;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:user forKey:@"user"];
[defaults setObject:pwd forKey:@"pwd"];
//从沙盒获取出用户名
NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey@"user"];
self.userLabel.text = user;
2、使用蒙版的时候兼容ipad和iPhone
使用多一个toView、
如:
[MBPraogressHUD showError:@“正在加载” toView:self.view];
3、使用自己创建的Block函数,需要自己添加__weak转换
__weak typeof(self) selfVc = self; //这句要添加
[app xmppUserRegister:^(XMPPResultType type){
··········
}];
4、注册完后设置登录页面用户名,使用代理
a.注册界面添加代理
.h
#import <UIKit/UIKit.h> @protocol WCRegisgerViewControllerDelegate <NSObject> /** * 完成注册 */ -(void)regisgerViewControllerDidFinishRegister; @end @interface WCRegisgerViewController : UIViewController @property (nonatomic, weak) id<WCRegisgerViewControllerDelegate> delegate; @end
.m
case XMPPResultTypeRegisterSuccess:
[MBProgressHUD showError:@"注册成功" toView:self.view];
// 回到上个控制器
[self dismissViewControllerAnimated:YES completion:nil];
if ([self.delegate respondsToSelector:@selector(regisgerViewControllerDidFinishRegister)]) {
[self.delegate regisgerViewControllerDidFinishRegister];
}
break;
b、登录界面通知代理
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
// 获取注册控制器
id destVc = segue.destinationViewController;
if ([destVc isKindOfClass:[WCNavigationController class]]) {
WCNavigationController *nav = destVc;
//获取根控制器
WCRegisgerViewController *registerVc = (WCRegisgerViewController *)nav.topViewController;
// 设置注册控制器的代理
registerVc.delegate = self;
}
}
#pragma mark regisgerViewController的代理
-(void)regisgerViewControllerDidFinishRegister{
WCLog(@"完成注册");
// 完成注册 userLabel显示注册的用户名
self.userLabel.text = [WCUserInfo sharedWCUserInfo].registerUser;
// 提示
[MBProgressHUD showSuccess:@"请重新输入密码进行登录" toView:self.view];
}
5.个人信息
点击cell出现三种情况
一种没反应
一种显示对话框(选择图片)
一种进入另一个控制器
通过给每一个cell设置tag,来分辨点击的情况
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{} //点击反馈
6.xmpp模块添加步骤
例如:自动连接模块
a。在XMPPFramework.h中添加模块头文件
b。在工具类中添加模块变量
c。在工具类初始化XMPPStream中添加模块并激活
d。在dealloc中调用teardownXmpp
e。在teardownXmpp中,停止模块,并清除变量
//使用CoreData获取数据
// 1.上下文【关联到数据库XMPPRoster.sqlite】
NSManagedObjectContext *context = [WCXMPPTool sharedWCXMPPTool].rosterStorage.mainThreadManagedObjectContext;
// 2.FetchRequest【查哪张表】
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];
// 3.设置过滤和排序
// 过滤当前登录用户的好友
NSString *jid = [WCUserInfo sharedWCUserInfo].jid;
NSPredicate *pre = [NSPredicate predicateWithFormat:@"streamBareJidStr = %@",jid];
request.predicate = pre;
//排序
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];
request.sortDescriptors = @[sort];
// 4.执行请求获取数据
_resultsContrl = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_resultsContrl.delegate = self;
NSError *err = nil;
[_resultsContrl performFetch:&err];
if (err) {
WCLog(@"%@",err);
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return _resultsContrl.fetchedObjects.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"ContactCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 获取对应好友
//XMPPUserCoreDataStorageObject *friend =self.friends[indexPath.row];
XMPPUserCoreDataStorageObject *friend = _resultsContrl.fetchedObjects[indexPath.row];
// sectionNum
// “0”- 在线
// “1”- 离开
// “2”- 离线
switch ([friend.sectionNum intValue]) {//好友状态
:
cell.detailTextLabel.text = @"在线";
break;
:
cell.detailTextLabel.text = @"离开";
break;
:
cell.detailTextLabel.text = @"离线";
break;
default:
break;
}
cell.textLabel.text = friend.jidStr;
return cell;
}
#pragma mark 当数据的内容发生改变后,会调用 这个方法
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
WCLog(@"数据发生改变");
//刷新表格
[self.tableView reloadData];
}
//实现这个方法,cell往左滑就会有个delete
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if (editingStyle == UITableViewCellEditingStyleDelete) {
WCLog(@"删除好友");
XMPPUserCoreDataStorageObject *friend = _resultsContrl.fetchedObjects[indexPath.row];
XMPPJID *freindJid = friend.jid;
[[WCXMPPTool sharedWCXMPPTool].roster removeUser:freindJid];
}
}
b。添加好友
#import "WCAddContactViewController.h"
@interface WCAddContactViewController()<UITextFieldDelegate>
@end
@implementation WCAddContactViewController
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
// 添加好友
// 1.获取好友账号
NSString *user = textField.text;
WCLog(@"%@",user);
// 判断这个账号是否为手机号码
if(![textField isTelphoneNum]){
//提示
[self showAlert:@"请输入正确的手机号码"];
return YES;
}
//判断是否添加自己
if([user isEqualToString:[WCUserInfo sharedWCUserInfo].user]){
[self showAlert:@"不能添加自己为好友"];
return YES;
}
NSString *jidStr = [NSString stringWithFormat:@"%@@%@",user,domain];
XMPPJID *friendJid = [XMPPJID jidWithString:jidStr];
//判断好友是否已经存在
if([[WCXMPPTool sharedWCXMPPTool].rosterStorage userExistsWithJID:friendJid xmppStream:[WCXMPPTool sharedWCXMPPTool].xmppStream]){
[self showAlert:@"当前好友已经存在"];
return YES;
}
// 2.发送好友添加的请求
// 添加好友,xmpp有个叫订阅
[[WCXMPPTool sharedWCXMPPTool].roster subscribePresenceToUser:friendJid];
return YES;
}
-(void)showAlert:(NSString *)msg{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:msg delegate:nil cancelButtonTitle:@"谢谢" otherButtonTitles:nil, nil];
[alert show];
}
@end
ios 微信细节的更多相关文章
- html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)
// html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ...
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
- HTML实现点击时的阴影(:active)(已解决iOS微信上无法使用)
一般是用这个委类:active 参考:http://www.w3school.com.cn/cssref/selector_active.asp 但是业界上实现的效果中,今日头条的手机端网页却不是这样 ...
- 苹果微信下载 iOS微信各版本列表
微信在不断地更新迭代,ios微信下载点击这里立即开始(手机电脑都可以,电脑端要安装iTunes),每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.(这里有Android微 ...
- 改进:js修改iOS微信浏览器的title
问题简介 前端入门没多久,可能连入门也不算,最近网上流行各自书籍改名,什么<前端开发,从入门到放弃>,<Android开发,从入门到改行>之类的,程序员真是个爱自嘲的群体,但我 ...
- iOS 微信 音频 视频自动播放
iOS 微信 音频 视频自动播放 http://www.w3ctech.com/topic/1165
- 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题
前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios ...
- 在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- iOS微信运动 刷分
修改 iOS微信运动的数据 很简单,这里记录下实现步骤. 首先要安装Theos,具体安装步骤就不说了.网上很多. 大体安装步骤: sudo brew install dpkg sudo brew i ...
随机推荐
- 常用小方法 or 语法
--> 获取外部文件 def groovyUtils = new GroovyUtils( context ) def xmlFilePath = groovyUtils.getProjectP ...
- J2EE程序员应该要掌握的linux知识
J2EE程序员应该要掌握的linux知识 大型J2EE应用都在建构在linux环境下的.开发环境下我们可以通过samba映射成本地的网络驱动器,直接在windows环境下进行编程调试.但是最后的发布还 ...
- 很值得学习的java 画图板源码
很值得学习的java 画图板源码下载地址:http://download.csdn.net/source/2371150 package minidrawpad; import java.awt.*; ...
- Codeforces Round #328 (Div. 2) A. PawnChess 暴力
A. PawnChess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/problem/ ...
- Codeforces Gym 100342E Problem E. Minima 暴力
Problem E. MinimaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attac ...
- 飘逸的python - 编码杂症之在字符串前面加u
有时候我们从其它地方接受的字符串经过艰难跋涉,它变了个样.比如收到的是'\u6253\u602a\u8005'而不是u'\u6253\u602a\u8005'. 明明肉眼看起来只需要加个u,但是怎 ...
- Android Studio升级后projectBuild failed.
近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...
- 关于在android手机中腾讯、阿里产品不自定义虚拟键盘的想法
1,自定义虚拟键盘,影响用户体验.你每个用户的喜好不一样,都有自己心仪的一款输入法.腾讯或是阿里设计出来的输入法很难满足上亿用户的喜好,到时候又是一场口水战,再说了就是专业的输入法肯定要比应用里嵌套的 ...
- C++赋值运算符函数
为类添加赋值运算符函数: 类型定义 class CMyString { public: CMyString(char *pData = NULL); CMyString(const CMyString ...
- Expectation Maximization and GMM
Jensen不等式 Jensen不等式给出了积分的凸函数值必定大于凸函数(convex)的积分值的定理.在凸函数曲线上的任意两点间连接一条线段,那么线段会位于曲线之上,这就是将Jensen不等式应用到 ...