我创建了一个带有nib文件的登录视图控制器,如下所示;
// loginVC是根视图控制器的本地方法中的局部变量,当按下用户登录按钮时调用此方法
loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
然后我将此登录视图控制器显示为根视图控制器中的模态视图控制器,如下所示;
[self presentViewController:loginVC animated:YES completion:nil];
到目前为止工作得很好但是当我从服务器收到错误响应时,例如找不到(HTTP响应404)或其他HTTP服务器或客户端错误响应,我在此模态视图控制器的警报视图中显示此错误消息(登录视图控制器),这也有效,在此步骤之后,当用户在此警报视图中按下确定按钮时,我将重置视图控制器。我通过以下步骤实现了这一目标;
-i在根视图控制器中定义了一个名为refreshLoginView
的委托方法-i已实现此方法如下;
-(void)refreshLoginView
{
[self dismissViewControllerAnimated:YES completion:^{
LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
loginVC.delegate = self;
[self presentViewController:loginVC animated:YES completion:nil];
}];
}
- 当用户按下警告视图的ok按钮时,将调用此方法,然后将创建一个新的登录控制器,这也可以,但是这个新创建的登录视图控制器的提交按钮不会响应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;
答案 0 :(得分:0)
您似乎在解雇旧的登录视图控制器,然后创建一个新的...正确吗?
那么,如果用户未能登录5次,那么将创建5个loginController对象?
在我看来,这将导致各种各样的问题。
相反,只是不要忽略loginviewcontroller,而是在其中写一个刷新方法,你可以调用它来清除文本字段。
-(void)refreshLoginView
{
[loginVC clearTextFields];
}
这意味着在根视图控制器中,您必须在某处维护对loginViewController的引用。