从 UIAlertView 按钮以编程方式推送视图?

Posted

技术标签:

【中文标题】从 UIAlertView 按钮以编程方式推送视图?【英文标题】:Push view programmatically from UIAlertView button? 【发布时间】:2014-07-11 15:02:21 【问题描述】:

我会从UIAlertView 按钮打开一个UIViewController,但它不起作用。

当用户终止游戏时,我会显示带有一些文本和两个按钮的 UIAlertView“Ok” 关闭警报,“Score” 打开分数页面.

这是实际的UIAlertView

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"YOU WIN!"
                                                            message:[NSString stringWithFormat:@"You win a game in %d seconds!",seconds]
                                                           delegate:self
                                                  cancelButtonTitle:@"Ok"
                                                  otherButtonTitles:@"Score", nil];
        [alert show];

这是推送视图的代码:

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

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    if([title isEqualToString:@"Score"])
        ScoreViewController *score = [[ScoreViewController alloc]init];
        [[self navigationController] pushViewController:score animated:YES];
    

我得到的是一个完全黑屏。有人能帮我吗?我无法弄清楚我做错了什么。

PS:ScoreViewController 有一个来自根视图的 segue,但我当然不能从故事板创建一个新的,因为我想通过警报视图按钮以编程方式执行 segue。

希望我已经很清楚了,任何帮助将不胜感激!

【问题讨论】:

看起来你根本没有在执行 segue。以编程方式执行 Storyboard segue 的方法是 performSegueWithIdentifier: sender: 抱歉,你是对的!我之前尝试过使用 segue,但没有用,所以我用谷歌搜索并找到了“pushViewController:动画:”,然后我忘了更改代码。我将编辑我的问题,但“performSegueWithIdentifier:发件人:”使用“线程 1:信号 SIGABRT”使应用程序崩溃 【参考方案1】:

看起来您正在实例化ScoreViewController 的实例并推送到您的导航控制器。虽然这是呈现另一个控制器的合法方式,但它与执行 Storyboard segue 不同。

首先,显然,您必须确保有一个连接故事板中的视图控制器的 segue。听起来你已经做到了那么远,所以接下来你要确保 segue 有一个标识符。选择 segue 并在属性检查器中设置其标识符。然后在代码中执行segue:

[self performSegueWithIdentifier:@"YourIdentifier" sender:self];

【讨论】:

我忘记了“明显”的部分!哈哈,非常感谢它的帮助。

以上是关于从 UIAlertView 按钮以编程方式推送视图?的主要内容,如果未能解决你的问题,请参考以下文章

定义状态变量后以编程方式推送视图

如何在 iOS 7 中以编程方式正确关闭 UIAlertView?

如何以编程方式在导航控制器上推送下一个视图控制器?

xcode/ios:以编程方式推送视图控制器并传递行信息

iOS 以编程方式转到选项卡和推送视图控制器

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?