-1

ユーザーにアクションをキャンセルする機会を与えるために、一時的なアラートを約 2 秒間表示したいと考えています。ユーザーがキャンセル ボタンをクリックすると、後続のメソッドは呼び出されません。ただし、ユーザーがキャンセルを押さない場合は、後続のメソッドが呼び出されます。誰でもこれを機能させる方法について何か考えがありますか?

次のようなセットアップがあります。

-(void) buttonPress {

    //alert with message and cancel button
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"2 seconds to cancel" 
    message:@"Push Cancel to stop" delegate:self cancelButtonTitle:@"Cancel" 
    otherButtonTitles:nil, nil];
    alert.tag = 1;
    [alert show];
    return;
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 0 && alertView.tag == 1) {

        //action cancelled
    }
    else {

        //action not cancelled
    }
}
4

10 に答える 10

5

2秒後にアラートを消すには、これを試してください:

-(void) buttonPress {

    //alert with message and cancel button
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"2 seconds to cancel" 
    message:@"Push Cancel to stop" delegate:self cancelButtonTitle:@"Cancel" 
    otherButtonTitles:nil, nil];
    alert.tag = 1;
    [alert show];

    // Create the perform selector method with alert view object and time-period
    [self performSelector:@selector(dismissAlertView:) withObject:alert afterDelay:2];
    return;
}


// Dismiss the alert view after time-Period     
-(void)dismissAlertView:(UIAlertView *)alert
{
    [alert dismissWithClickedButtonIndex:-1 animated:YES];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 0 && alertView.tag == 1) {

        //action cancelled
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismissAlertView:) object:alertView];
    }
    else {

        //action not cancelled
    }
}
于 2013-06-25T07:05:45.043 に答える
0

次のコードを使用します。

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(FunctionName) userInfo:nil repeats:NO];
-(Void)YourFunctionName
{
}
于 2013-06-25T07:08:00.760 に答える
0

これを試して:

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(popViewAfterMessage) userInfo:nil repeats:NO];

-(void) popViewAfterMessage {
    // your code here...
}
于 2013-06-25T07:04:37.963 に答える
0

以下はロジックです..

  1. ユーザーにアクションをキャンセルする機会を与える約 2 秒間の一時的なアラート。

    フラグ変数を設定して、天候が継続するかどうかを示すようにします。

  2. ユーザーがキャンセル ボタンをクリックすると、後続のメソッドは呼び出されません。

    UIAlertview がユーザーの前に来るとすぐにタイマーを 2 秒間開始し、フラグを false に設定します。

  3. ただし、ユーザーがキャンセルを押さない場合は、後続のメソッドが呼び出されます。

    UIAlertview を非表示にし、2 秒のタイマーを停止してフラグ値を true にし、後続のメソッドを呼び出してロジックを続行します。

于 2013-06-25T07:05:23.393 に答える
0

2 秒後に呼び出されるメソッドを 1 つ作成し、アラートビューを閉じて、実行したいタスクを実行できます。

そのメソッドは次のように呼び出すことができます -

[self performSelector:@selector(yourMethodName) withObject:nil afterDelay:2];
于 2013-06-25T07:02:22.983 に答える
0

必要な遅延 (2 秒) で NSTimer を設定します。タイマーのデリゲートで、適切な引数を指定して UIAlertView のデリゲートを呼び出します。

于 2013-06-25T07:02:35.693 に答える
0

NSTimerアラートを表示したときに開始し(繰り返さない)、デリゲート コールバックでキャンセルします。タイマーが起動したら、アラートを閉じて、後続のタスクを呼び出します。

于 2013-06-25T07:03:24.260 に答える
-1
 [self performSelector:@selector(sendMail) withObject:nil afterDelay:1.0];
于 2013-06-25T07:39:10.750 に答える
-1

この関数を使用します。

- (void)hideAllAlerts {

    for (UIWindow* window in [UIApplication sharedApplication].windows) {
        NSArray* subviews = window.subviews;
        if ([subviews count] > 0)
            if ([[subviews objectAtIndex:0] isKindOfClass:[UIAlertView class]])
                [(UIAlertView *)[subviews objectAtIndex:0] dismissWithClickedButtonIndex:[(UIAlertView *)[subviews objectAtIndex:0] cancelButtonIndex] animated:NO];
    }
}

コードを変更してください:

-(void) buttonPress {

    //alert with message and cancel button
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"2 seconds to cancel" 
    message:@"Push Cancel to stop" delegate:self cancelButtonTitle:@"Cancel" 
    otherButtonTitles:nil, nil];
    alert.tag = 1;
    [alert show];
    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideAllAlerts) userInfo:nil repeats:NO];

    return;
}
于 2013-06-25T07:35:27.257 に答える