新建一个添加好友的ViewController为AddFriendViewController  和设置class

连线text框 friendNameText

遵守<UITextFieldDlegate>

//设置文件框代理  //

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

  //1.判断文本框是否输入内容   在.pch中导入 NSString+Helper.h头文件截断字符串 就不用每次都去导入头文件和LoginUser.h

  NSString *name = [textField.text trimstring];

  if (![name isEmptyString]){

    [self addFriendWithName:name];  //2.如果输入就调用添加好友方法

  }

  return YES;

}

在viewDidLoad中 [_friendNameText becomeFirstResponder];  //进来就打开键盘

1. 自定义一个添加好友的方法

-(void)addFriendWithName:(NSString *)name{

  //1.判断是否由域名

  NSRange range = [name rangeOfString:@"@"];

 

  if (NSNotFound == renge.location){    //2.如果没有,添加域名完整的JID字符串  在name尾部添加域名

    name = [NSString stringWithFormat:@"%@@%@",name,[loginUser sharedLoginUser].hostName];

  }

  //3.判断是否与当前用户相同

  if([name isEqualToString:[LoginUser sharedLoginUser].myJIDName]){

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"自已不用添加自己"

delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

    [alert show];

  return;

  }

  //4.判断是否已经是自己的好友

  (在花名册模块    设置接收好友订阅请求

   [_xmppRoster setAutoAcceptKnownPresenceSubscriptionRequests:YES];

   [_xmppRoster activate:_xmppStream];  )  

  在文件中添加appDelegate代理头文件

    因为经常写就可以定义成宏  #define xmppDelegate (AppDelegate *)[[UIApplication sharedApplication]delegate]; 

  //5.发送添加好友请求  //双向添加

  [[xmppDelegate xmppRoster] subscribePresenceToUser:[XMPPJID jidWithString:name]];  

  //提示用户,并返回上一级页面

  

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"添加好友请求已发送"

delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

   [alert show];

  

}

//遵守UIAlertViewDelegate代理  点击确定后跳转页面

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

  [self.navigationController popViewControllerAnimated:YES];

}

  //单向添加

  在AppDelegate.m中遵守协议<XMPPStreamDelegate,XMPPRosterDelegate>

  在代理.m文件中 添加用户展现方法

  -(void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence{
  //接收用户展示数据  意思 接收用户发送添加好友消息

  // 判断 接收到的presence类型是否为subscribe

    if([presence.type isEqualToString:@"subscribe"]{

  //2.取出presence中的from的JID

  XMPPJID *from = [presence from];

  //3.接受来自from添加为好友的订阅请求 

  [_xmppRoster subscribePresenceToUser:from]; 

    }

  }

  -(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{

  //接收到其它用户的请求

  }

  //  表格代理方法、允许表格滑动删除  1、 实现tableView:canEditRowAtIndexPath:方法,允许表格边界

  

  -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ return YES;}

  -(void)tableView:UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{//2.提交编辑状态

  if(UITableViewCellEditingStyleDelegate == editingStyle){

  //删除数据  在OC开发中,是MVC架构,数据是绑定到表格,如果要删除表格中的数据,应该先删除数据,再刷新表格

  XMPPUserCoreDataStorageObject *user = [_fetchedResultsController objectAtIndexPath:indexPath];

//提示用户

  UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"是否删除好友" message:user.jidStr

delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];

  _removedIndexPath = indexPath;  //记录要删除表格的索引

  [alert show];

  

}

  }

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

  

  //删除好友

if (1 == buttonIndex){

  //用indexPathForSelectedRow是获取不到被删除的行

    XMPPUserCoreDataStorageObject *user = [_fetchedResultsController objectAtIndexPath:_removedIndexPath];

    [[xmppDelegate xmppRoster]removeUser:user.jid];

  //定义一个成员变量记录要删除表格的索引   NSIndexPath  *_removedIndexPath;

  }

}

  

转载于:https://www.cnblogs.com/qq907374866/p/4277197.html

9.添加好友 和删除相关推荐

  1. APP - 微信拉黑和删除有什么不同?还是好友吗?

    一.拉黑 1.1.拉黑方 通过[我][设置][隐私][通讯录黑名单]可以洗白.且拉黑或洗白时均不会通知对方. 1.2.被拉黑 所有发送的会话.双方朋友圈均被屏蔽,除非对方主动为自己洗白,否则无法重新加 ...

  2. 实时聊天软件常用架构

    我把第一个问题选为:QQ的架构.呵呵,题目是不是有点大?QQ现在的最高在线用户数是1900万,我们来讨论一下要作一个这样的架构如何来作更好,大家积极发言,这也是我这个周末为自己选择的思考题,呵呵.大家 ...

  3. 转贴:QQ的架构讨论

    转贴:QQ的架构讨论 导读:  转贴:QQ的架构问题  -----------sodme 大宝  hi, all:  我把第一个问题选为:QQ的架构.呵呵,题目是不是有点大?QQ现在的最高在线用户数是 ...

  4. QQ架构的讨论(整理)

    转贴:QQ的架构问题   -----------sodme 大宝 hi, all: 我把第一个问题选为:QQ的架构.呵呵,题目是不是有点大?QQ现在的最高在线用户数是1900万,我们来讨论一下要作一个 ...

  5. MSN Messenger服务器

    MSN Messenger服务器可以分为三类:Dispatch Server(DS).Notification Server(NS).Switchboard Server(SB). DS是Messen ...

  6. Oracle所有错误类型

    ORA-00001: 违反唯一约束条件 (.)  ORA-00017: 请求会话以设置跟踪事件  ORA-00018: 超出最大会话数  ORA-00019: 超出最大会话许可数  ORA-00020 ...

  7. oracle常用errcode

    ORA-00001: 违反唯一约束条件 (.)     ORA-00017: 请求会话以设置跟踪事件      ORA-00018: 超出最大会话数      ORA-00019: 超出最大会话许可数 ...

  8. android xmpp 删除好友列表,android xmpp好友相关功能 添加好友 删除 移动 在线 离线 隐身 忙碌...

    最近在写一个即时通信的项目,用的也是xmpp,asmack和openfire,这个可以算是我做的第一个正式项目吧,所以也是一边查资料一边写的,虽说网上资料很多,但不少逻辑和需要注意的地方还是自己整理发 ...

  9. 仿qq左滑删除listview_Java基于Swing和Netty仿QQ界面聊天小项目

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 来源:b ...

最新文章

  1. 0414复利计算6.0--结对
  2. pyqtdeploy教程_PyQtdeploy-V2.4 User Guide 中文 (一)
  3. webpack devServer
  4. Hadoop自学笔记(三)MapReduce简单介绍
  5. MD5算法之C#程序 MD5算法描述
  6. Qt TextEdit 使用 (积累中....)
  7. arma模型matlab代码_DCC GARCH模型
  8. 闪电网络开启BTC支付时代?他们不同意
  9. PHP中ajax返回xml数据,PHP 实例 AJAX 与 XML | 菜鸟教程
  10. Springmvc 控制器的作用
  11. YUV 与 颜色空间转换
  12. GIS空间分析之Clip
  13. 【Linux】putty 出现 inactive
  14. 不动产登记工作统计难 要靠三维不动产管理系统
  15. pyton入门 — 其他常用语法
  16. Excel批量插入多个空行-VBA实现
  17. 开发小程序插件如何实现盈利?
  18. 怎么把qlv格式转换成mp4?快速转换qlv格式的方法
  19. 滴水逆向三期和中级和高期教程
  20. 机智云AIoT开发平台,让物联网产品开发和运营有迹可循

热门文章

  1. 圣诞节快乐:来自程序员们的问候~
  2. 图解机器学习之回归模型性能评估指标
  3. Android实战开发-Kotlin教程(布局篇 3.1)
  4. 微信小程序中使用第三方ui框架方法
  5. 微信小程序框架(一)-全面详解(学习总结---从入门到深化)
  6. ios识别人脸自动拍照_真的逆天?iOS 10相册识别人脸的秘密
  7. 基于JAVA读书网络社区设计计算机毕业设计源码+系统+lw文档+部署
  8. Python保护视力小程序
  9. 转:CentOS 7 安装Nginx
  10. 记第一次参加五一数学建模竞赛