1

ユーザー名とパスワードを取得するために、http基本認証デリゲートの関数でUIViewController示されているカスタムがあります。presentModalViewControllerユーザーが画面に表示されているモーダルビューコントローラーのログインボタンをクリックするまで待ちたいです。これどうやってするの?私はiOSが初めてなので、コメントやリンクをいただければ幸いです。

編集:ここにサンプルコードがありますNSURLConnectionDelegate

-(void) connection(NSURLConnection*)connection willSendRequestForAuthenticationChallenge(NSURLAuthenticationChallenge*)challenge
{
    CustomAuthViewController *authView = [CustomAuthViewController alloc] initWithNibName"@"CustomAuthViewController" bundle:[NSBundle mainBundle]];
    [parentcontroller presentModalViewController:authView animated:YES];
    // 
    // I want to wait here somehow till the user enters the username/password
    //
    [[challenge sender] userCredentials:credentials forAuthenticationChallenge:challenge];
}

敬具。

編集: 解決策: willSendRequestForAuthenticationChallenge デリゲート関数で資格情報をすぐに送信する必要はありません。あとでいつでも送れるのに、 変だけど。

4

1 に答える 1

6

基本的に、ログイン ダイアログが完了したときに、モーダル UIViewController から呼び出し元にメッセージを渡す必要があります。これを行うにはいくつかの方法があります。ここにカップルがあります:

オプション 1 - デリゲート パターン:

モーダル ダイアログ .h

@protocol LoginDelegate
- (void)loginComplete:(NSString *)userId;
- (void)loginFailed;
@end

@interface MyLoginDialog : UIViewController {
    UIViewController *delegate;
}

@property (nonatomic, retain) UIViewController *delegate;

モーダル ダイアログ .m で

あなたの初期設定で:

delegate = nil;

あなたのdeallocで:

[delegate release];

ログインを完了すると、次のようになります。

[delegate dismissModalViewControllerAnimated:YES]; 
[delegate loginComplete:userId] or [delegate loginFailed];

次に、呼び出し元のビュー コントローラーで LoginDelegate プロトコルを実装します。

そして、ログイン ビュー コントローラーを作成するときに、デリゲートを設定します。

UIViewController *viewLogin = [[UIViewController alloc] init];
viewLogin.delegate = self;

オプション 2 - NSNotificationCenter で通知を投稿します。

ログインダイアログで:

[self dismissModalViewControllerAnimated:YES];
[[NSNotificationCenter defaultCenter] postNotificationName:@"LoginComplete" object:nil];

呼び出し元のビュー コントローラーで

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginComplete:) name:@"LoginComplete" object:nil];

次に、セレクタ loginComplete を実装します。

ログイン情報 (ユーザー名、ユーザー ID など) を返したい場合は、それを辞書にパッケージ化し、postNotificationName メソッドの「オブジェクト」として追加できます。

また、必ず電話する必要があります

[[NSNotificationCenter defaultCenter] removeObserver:self];  

聞き終わったら。

于 2012-05-06T13:49:33.713 に答える