0

我创建了一个带有 nib 文件的登录视图控制器,如下所示;

//loginVC 是根视图控制器本地方法中的一个局部变量,当用户按下登录按钮时调用该方法

loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];

然后我将此登录视图控制器显示为根视图控制器中的模态视图控制器,如下所示;

[self presentViewController:loginVC animated:YES completion:nil];

到目前为止工作正常,但是当我从服务器收到错误响应时,例如未找到(HTTP 响应 404)或另一个 HTTP 服务器或客户端错误响应,我在此模式视图控制器(登录视图控制器)的警报视图中显示此错误消息),这也有效,在此步骤之后,当用户在此警报视图中按下确定按钮时,我将重置视图控制器。我通过以下步骤实现了这一点;

-i 在根视图控制器中定义了一个委托方法,称为 refreshLoginView

-我已经实现了这个方法如下;

-(void)refreshLoginView
{
    [self dismissViewControllerAnimated:YES completion:^{
        LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
        loginVC.delegate = self;
        [self presentViewController:loginVC animated:YES completion:nil];
    }];
}

-当用户按下警报视图的确定按钮时,将调用此方法,然后将创建一个新的登录控制器,这也可以,但是当用户时,这个新创建的登录视图控制器的提交按钮不响应 UIControlEventTouchUpInside 事件按下提交按钮。

    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        if(buttonIndex == 0){
            [self.delegate refreshLoginView];
        }
    }

我的问题是;

我怎样才能刷新这个登录视图控制器(模态视图控制器)?我不确定我的方式是否正确。如果我的方法是正确的,我怎样才能正确刷新 uibutton(提交按钮)?

我的所有控制器(文本字段、标签和按钮)都是可视化创建的,并使用 IBOutlets 连接到 loginview 控制器,如下所示

@property (retain, nonatomic) IBOutlet UIButton *btnSubmit;
@property (retain, nonatomic) IBOutlet UILabel *lblUsername;
@property (retain, nonatomic) IBOutlet UILabel *lblPassword;
@property (retain, nonatomic) IBOutlet UITextField *txtUsername;
@property (retain, nonatomic) IBOutlet UITextField *txtPassword;
4

1 回答 1

0

您似乎正在解雇一个旧的登录视图控制器,然后创建一个新的......对吗?

那么,如果用户 5 次登录失败,那么会创建 5 个 loginController 对象吗?

在我看来,这会导致各种问题。

相反,只是不要关闭 loginviewcontroller,而是在其中编写一个刷新方法,您可以调用该方法来清除文本字段。

-(void)refreshLoginView
{
    [loginVC clearTextFields];
}

这意味着在您的根视图控制器中,您必须在某处维护对 loginViewController 的引用。

于 2013-04-26T15:22:59.957 回答