1

ページカールのあるモーダルビューを使用して、ユーザー名を入力できるようにするビューがあります。次に、このユーザー名はWebベースのサービスで検証され、有効かどうかが確認されます。

無効なユーザー名を入力してモーダルビューの外側をクリックするまで、すべてがうまく機能します。これはまだユーザー名をチェックしますが、これは無効であると報告され、UIAlertView開きます。ただし、親ビューに戻ります。

この場合、モーダルを却下しないようにする方法はありますか?

ビューをリロードしようとしましたが、機能していないか、UIAlertViewブロックされています。私が持っている最後のアイデアは、モーダルビューの表示と無効なユーザー名のアラートの「OK」を組み合わせることです。誰かアイデアはありますか?

4

2 に答える 2

1

を使用していない場合UINavigationControllerは、モーダル ビューを呼び出すビュー コントローラーに次のようなものを配置できます。

-(void)dismissModalViewControllerAnimated:(BOOL)animated{
    if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated];
}

ページカールをタップすると、提示/親ビューコントローラーが送信されdismissModalViewControllerAnimated:ます。

ナビゲーション コントローラーを使用しているため、オプションは限られています。これはUINavigationControllerが のサブクラスでUIViewControllerあり、自己中心的なものだからです。ページカールをクリックすると、dismissModalViewControllerAnimated: が呼び出されます。

上記のメソッドをサブクラス化して実装するオプションはまだありますがUINavigationController、急いで面倒になります。

UIAlertView をモーダル ログイン ビューに「直接戻す」ことは非常に簡単です。そのメイン ビューをUIAlertViewDelegateプロトコルに準拠させます。アラートを表示すると、そのインスタンスがデリゲートとして設定され、そのクラスでメソッドが実装されます。

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    // Enclose in if (buttonIndex == #) for selective calling
    UINavigationController* nav = (UINavigationController*)[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"Preferences"];
    [nav setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self.navigationController presentModalViewController:nav animated:YES]; 
}

次に、アラート ビューを閉じると、「ログイン」ビューが表示されます。

于 2011-11-29T20:55:52.447 に答える
0

モーダルビューを少し遅れて再表示する必要があります。約0.3〜0.5です。これは、アラートを閉じるのに必要な時間であり、モーダルビューが表示されないようにするアニメーション(アラートビューの閉じる)です。

-(void)showModal{
    SomeModalViewClass* modalView = [[SomaModalViewClass alloc]init];
    [self setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self presentModalViewController:modalView animated:YES];
    [modalView release];
}

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    //check the button index if needed and then
    [self performSelector:@selector(showModal) withObject:nil afterDelay:0.3]; 
}
于 2011-11-30T06:50:56.537 に答える