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
最新文章
- jQuery的DOM操作实例(3)——创建节点&;&;编写一个弹窗
- adb devices 偵測不到 手機
- Linux+Mono+WebService:CS1703: An assembly with the same identity--mscorlib
- 检索 COM 类工厂中 CLSID 解决办法
- linux虚拟机上不了网--桥接方式--问题一直未解决
- delphi cxgrid 使用方法
- [Android Pro] Android 进程级别 和 oom_adj对应关系
- C# Driver LINQ Tutorial
- iOS开发——数据持久化&;使用NSUserDefaults来进行本地数据存储
- Overview &; Change Log
- verilog中的function用法与例子
- call-template和apply-templates
- Android控件TextView的实现原理分析
- spring-boot整合dubbo:Spring-boot-dubbo-starter
- CDN边缘节点容器调度实践(上)
- C# web发布设置
- string与stringBuffer区别
- LOJ #2538. 「PKUWC 2018」Slay the Spire (期望dp)
- java 除法运算只保留整数位的3种方式
- 如何利用office绘制施工进度计划横道图?
热门文章
- HTML5 - HTML5 postMessage API 注意事项
- Linux下C程序的编辑,编译和运行以及调试
- Visual Prolog 的 Web 专家系统 (9)
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
- slf4j-simple的配置
- Java中数组的快排
- Android(java)学习笔记101:WindowManager 中LayoutParams的各种属性
- iOS XMPP(2)自己创建客户端
- CSS skills: 2) change hover dynamically by js
- wpf 父控件透明子控件不透明