将dismissViewController 与UIAlertController 一起使用
Posted
技术标签:
【中文标题】将dismissViewController 与UIAlertController 一起使用【英文标题】:Using dismissViewController with UIAlertController 【发布时间】:2018-07-25 19:34:48 【问题描述】:我正在更新 ios 中的 Objective-C 应用程序,由于 UIAlertView 已被弃用,因此我将 UIAlertController 与 UIAlertAction 一起用于 OK 和 Cancel 按钮。所以我对后退按钮有以下功能,但我不知道如何处理 OK 和 Cancel 按钮,因为 OK 应该让你回到上一个屏幕,而 Cancel 应该让你留在同一个屏幕上。以下是我到目前为止的代码。
- (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];
【问题讨论】:
【参考方案1】:[alert dismissViewControllerAnimated:TRUE completion:nil]
语句只会关闭警报,因为它是屏幕上的顶视图控制器。
因此,您无需为 Cancel 操作执行任何其他操作。
对于您的 Ok 操作,您有多个操作可以返回上一个屏幕:
如果您的视图控制器是 UIViewController
单独的,只需调用 [self dismissViewControllerAnimated:TRUE completion:nil]`
如果视图控制器嵌入到导航控制器中,请调用[self.navigationController popToRootViewControllerAnimated:YES]
。
你也可以使用 unwind segue 到你想要返回的视图控制器。
希望对你有帮助! ;)
【讨论】:
【参考方案2】:无需致电[alert dismissViewControllerAnimated:TRUE completion:nil];
,当您点击其中一个按钮时,警报将被解除。
在完成ok
按钮时,如果您的viewController 嵌入在navigationController 中,您可以使用[self.navigationController popToRootViewControllerAnimated:YES];
。
【讨论】:
【参考方案3】:以上答案都是正确的。我其实很想发表评论,但我没有足够的声誉。
您应该尝试查看此线程以更好地了解解除 viewController。 Dismissing a Presented View Controller
【讨论】:
【参考方案4】:试试这个,希望这能解决你的问题。
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
【讨论】:
以上是关于将dismissViewController 与UIAlertController 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Dismissviewcontroller 并执行 segue
未调用dismissViewController 完成处理程序
dismissViewController 或 popViewController 都不起作用
为 DismissViewController 添加通知而不进行子类化