将dismissViewController与UIAlertController一起使用

时间:2018-07-25 19:34:49

标签: objective-c uialertcontroller alerts

我正在更新iOS中的Objective-C应用程序,并且由于不赞成使用UIAlertView,因此我将UIAlertController和UIAlertAction用作“确定”和“取消”按钮。因此,对于后退按钮,我具有以下功能,但是我不知道如何处理“确定”和“取消”按钮,因为“确定”应让您返回到上一屏幕,而“取消”应使您停留在同一屏幕上。以下是我到目前为止的代码。

- (void)backAction:(id)sender
{
    //do your saving and such here

    if ([doneBtn isEnabled])
    {
        //CHANGE 2018
        UIAlertController *alert = [UIAlertController alertControllerWithTitle: @"Alert" message:@"Signature will be lost. Do you want to continue?." preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *ok = [UIAlertAction actionWithTitle: @"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
            //should go to the previous scree. 
            //[alert dismissViewControllerAnimated:TRUE completion:nil]; //I'm not sure if this only hides the alert or hides the entire screen 

        }];
        UIAlertAction *cancel = [UIAlertAction actionWithTitle: @"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
            //should stay in the same screen 
            [alert dismissViewControllerAnimated:TRUE completion:nil]; //the same doubt 

        }];

        [alert addAction: ok];
        [alert addAction: cancel];

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


        //UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Signature will be lost. Do you want to continue?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil];
        //[alert show];
    }

4 个答案:

答案 0 :(得分:1)

语句[alert dismissViewControllerAnimated:TRUE completion:nil]只会关闭警报,因为它是屏幕上的顶部视图控制器。

因此,您的取消操作不需要执行任何其他操作。

对于您的确定操作,您有多个操作可以返回上一屏幕:

  • 如果您的视图控制器仅是UIViewController,只需调用[self dismissViewControllerAnimated:TRUEcomplete:nil]`

  • 如果视图控制器已嵌入导航控制器中,请致电[self.navigationController popToRootViewControllerAnimated:YES]

  • 您也可以对要返回的视图控制器使用展开按钮。

希望它能对您有所帮助! ;)

答案 1 :(得分:0)

当您点击其中一个按钮时,便会关闭警报,而不必致电[alert dismissViewControllerAnimated:TRUE completion:nil];

完成ok按钮后,如果viewController嵌入在navigationController中,则可以使用[self.navigationController popToRootViewControllerAnimated:YES];

答案 2 :(得分:0)

以上答案正确。我实际上想发表评论,但我没有足够的声誉。

您应该尝试看一下该线程,以更好地理解关闭视图控制器。 Dismissing a Presented View Controller

答案 3 :(得分:0)

尝试一下,希望这可以解决您的问题。

UIAlertController * alert=[UIAlertController alertControllerWithTitle:@"Title" 
message:@"Message"preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* okButton = [UIAlertAction
                    actionWithTitle:@"Ok, please"
                    style:UIAlertActionStyleDefault
                    handler:^(UIAlertAction * action)
                    {
                        [self okButtonPressed];

                    }];
UIAlertAction* cancelButton = [UIAlertAction
                        actionWithTitle:@"No, thanks"
                       style:UIAlertActionStyleDefault
                       handler:^(UIAlertAction * action)
                       {
                           [self cancelButtonPressed];

                       }];

[alert addAction:okButton];
[alert addAction:cancelButton];

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

现在关闭视图控制器。

- (void)cancelButtonPressed{
 // Write your implementation for Cancel button here.
}

 - (void)okButtonPressed{
//Write your implementation for Ok button here
}