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]];
}