0

次のようなnibファイルを使用してログインビューコントローラーを作成しました。

//loginVC は、ルート ビュー コントローラーのローカル メソッド内のローカル変数です。このメソッドは、ユーザーのログイン ボタンが押されたときに呼び出されます。

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

次に、このログイン ビュー コントローラーをルート ビュー コントローラーのモーダル ビュー コントローラーとして次のように提示します。

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

これまでのところ完全に機能しますが、サーバーからエラー応答 (HTTP 応答 404) や別の HTTP サーバーまたはクライアント エラー応答を受け取った場合、このモーダル ビュー コントローラー (ログイン ビュー コントローラー) のアラート ビューにこのエラー メッセージを表示します。 )、これも機能します。この手順の後、ユーザーがこのアラート ビューで [OK] ボタンを押すと、View Controller がリセットされます。次の手順でこれを達成します。

-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ボタンを押すと、このメソッドが呼び出され、新しいログインコントローラーが作成されます。これも機能しますが、ユーザーが送信ボタンが押されました。

    -(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 を閉じるのではなく、その中に refresh メソッドを記述して、テキスト フィールドをクリアするために呼び出すことができます。

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

これは、ルート ビュー コントローラーで loginViewController への参照をどこかに維持する必要があることを意味します。

于 2013-04-26T15:22:59.957 に答える