4.XMPP用户界面登录

一、 将用户名和密码输出框拖线到文件中。不想别人访问就可以拖到.M文件中。

  1.输入框需要用户使用回车键  将输入框的代理连线到控制器     

  2.再到文件中继承<UITextFieldDelegate>

 在 -(void)textFieldShouldReturn:(UITextField *)textField{

  if (textField ==_userNameText){

  [_passwordText becomeFirstResponder];

  }else{

  //登录

  [self userLogin];

  }

  return YES;

}

  3.将登录连接方法 -(IBAction)userLogin;

在方法中{

  1.检查用户输入是否完整

  //截断字符串前后的空格(密码除外),从而可以最大程度降低用户输入错误

  NSString *userName = [_userNametext.text trimString]; 

    NSString *password = _passwordText.text;   //有些用户会使用空格做密码 

  if ([userName isEmptyString] || [password isEmptyString]){  //判断用户信息是否输入完整

  UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"登录信息不完整" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil,nil];

  [alter show];

  

  return;

  }

  2.让AppDelegate开始连接

    添加AppDelegate.h头文件

    添加 -(AppDelegate *)appDelegate{ //并初始化这个方法

    return [[UIApplication sharedApplication] delegate];

    }

  2.1将用户登录信息写入系统偏好

  导入.h文件 

  [userName saveToNSDefaultsWithKey:kXMPPUserNameKey];

  [password saveToNSDefaultsWithKey:kXMPPPasswordKey];

  [hostName saveToNSDefaultsWithKey:kXMPPHostNameKey];

  在AppDelegate.h文件中 定义一个连接到服务器的方法 判断是否正确失败块代码 及用户键值key

  #define kXMPPUserNameKey @"xmppUserName"

  #define kXMPPPasswordKey  @"xmppPassword"

  #define kXMPPHostNameKey  @"xmppHostName"

  typedef void(^CompletionBlock)();

  

  -(void)connectWithUserName:(CompletionBlock *)completion password:(CompletionBlock *)faild; //completion 正确块代码 faild错误块代码

  在AppDelegate.m文件中。修改指定用户名、主机的方法 开始发送身份请求

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

  NSString *hostName = [defaults stringForKey:kXMPPHostNameKey];

  NSString *userName = [NSString stringWithFormat:@"%@@%@",[defaults stringForKey:kXMPPPasswordKey],[defaults stringForKey:kXMPPHostNameKey]];

  //在开始发送身份请求修改密码

  NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:xmppPassword];  

  //在写成功和失败的块代码 interface{

  CompletionBlock _completionBlock;  //成功

  CompletionBlock _faildBlock;      //失败

  }

  //连接到服务器  实现 -(void)connectWithUserName:(CompletionBlock *)completion password:(CompletionBlock *)faild{

  1.记录块代码

  _completionBlock =completion;

  _faildBlock =faild;

  2.如果已经存在连接,先断开连接,然后再次连接

  if([_xmppStream isConnected]{

  [_xmppStream disconnect];

  }

  3.连接到服务器

  [self connect];

  }

  //在身证验证通过方法中 判断_completionBlock是否为空

  if (_completionBlock !=nil){ _completionBlock();}

  //在身份验证失败方法中

  if (_faildBlock !=nil){ _faildBlock();}

    注释   上面的激活[self disConnect]; 和断开[self connect];

  //  让AppDelegate开始连接

  [[self appDelegate] connectWithCompletion:^{//登录成功}failed:^{//失败}]; 

  3.连接成功或失败后提示用户

}  

  3.1.1 去除字符串中的空白字符。可以建个分类 在我的代码>Category文件夹有常用方法 Tool是建单例   添加NSString+Helper.h文件有下面这个方法

  -(NSString *)trimString:(NSString *)str{

  return [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

  }

  

原文地址:https://www.cnblogs.com/qq907374866/p/4252520.html