XMPPFramework iOS开发(四)注册登录

XMPPFramework iOS开发(四)注册登录

一、程序目标

新建Login.storyboard,并把项目的Main Interface设置为Login。

帐号密码运行前就写好是为了方便调试,登录成功后跳转到Main.storyboard。如果之前就已经登录成功,则下次程序运行时不需要登录就直接跳转到Main.storyboard。

二、用户登录

2.1 点击登录按钮

- (IBAction)loginBtnClick {

    if (self.accountField.text.length == 0 || self.pwdField.text.length ==0) {
        ZHLog(@"请输入用户名和密码");

        return;
    }

    [MBProgressHUD showMessage:@"正在登录……"];

    [WCUser shareUser].loginAccount = self.accountField.text;
    [WCUser shareUser].loginPwd = self.pwdField.text;

    // 调用 AppDelegate 的用户登录方法
    [WCXMPPTool sharedWCXMPPTool].registerOperation = NO;
    __weak typeof(self) selfVc = self;
    [[WCXMPPTool sharedWCXMPPTool] xmppLogin:^(XMPPResultType resultType) {

        [selfVc handleXMPPResultType:resultType];

    }];
}

解释一下上面代码中的三个点:
1. 使用weak关键字,是因为登录成功跳转到Main.storyboard后,Login界面不应该继续存在;
2. MBProgressHUD是常见的用于提示信息的第三方类库;
3. 要记得把registerOperation设置为NO,不然先注册再登录会报错。

2.2 处理登录结果

- (void)handleXMPPResultType:(XMPPResultType)resultType
{
    //有关UI的操作切换到主线程执行
    dispatch_async(dispatch_get_main_queue(), ^{

        [MBProgressHUD hideHUD];

        if (resultType == XMPPResultTypeLoginSuccess) {
            ZHLog(@"%s, 登录成功", __func__);
            [UIStoryboard showInitialVCWithName:@"Main"];

            [WCUser shareUser].login = YES;

            [[WCUser shareUser] saveToSandBox];

        }else {
            ZHLog(@"%s, 登录失败",__func__);
            [MBProgressHUD showError:@"帐号或密码错误"];
        }
    });

}

- (void)dealloc
{
    ZHLog(@"%s", __func__);
}

上面 [UIStoryboard showInitialVCWithName:@”Main”] 是通过分类实现的,实现方法很简单:

+(void)showInitialVCWithName:(NSString *)name{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:name bundle:nil];
    [UIApplication sharedApplication].keyWindow.rootViewController = storyboard.instantiateInitialViewController;
}

三、注册

实现的方法和登录几乎一样

- (IBAction)registerBtnClick:(id)sender {

    [WCUser shareUser].registerAccount = self.accountField.text;
    [WCUser shareUser].registerPwd = self.pwdField.text;

    [MBProgressHUD showMessage:@"正在注册中……"];

    [WCXMPPTool sharedWCXMPPTool].registerOperation = YES;
    __weak typeof(self) selfVc = self;
    [[WCXMPPTool sharedWCXMPPTool] xmppRegister:^(XMPPResultType resultType) {
        [selfVc handleXMPPResultType:resultType];
    }];
}

/** * 处理注册结果 */
- (void)handleXMPPResultType:(XMPPResultType)resultType
{
    //有关UI的操作切换到主线程执行
    dispatch_async(dispatch_get_main_queue(), ^{

        [MBProgressHUD hideHUD];

        if (resultType == XMPPResultTypeRegisterSuccess) {
            [MBProgressHUD showSuccess:@"恭喜注册成功!返回登录界面……"];

            [self.navigationController popToRootViewControllerAnimated:YES];
        }else {
            [MBProgressHUD showError:@"用户名重复"];
        }
    });

}

四、注销

注销的按钮放在Main.storyboard个人信息右边的BarButtonItem,实现方法也很简单:

- (IBAction)logoutBtnClick:(id)sender {
    //注销登录
    [[WCXMPPTool sharedWCXMPPTool] xmppLogout];

    //把沙盒自动登录状态设置为NO
    [WCUser shareUser].login = NO;
    [[WCUser shareUser] saveToSandBox];

    //返回登录界面
    [UIStoryboard showInitialVCWithName:@"Login"];
}

五、小结

XMPPFramework iOS开发(四)注册登录_第1张图片

XMPPFramework iOS开发(四)注册登录_第2张图片

XMPPFramework iOS开发(四)注册登录_第3张图片

XMPPFramework iOS开发(四)注册登录_第4张图片

以上。

你可能感兴趣的:(ios,注册登录)