从 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 按钮以编程方式推送视图?的主要内容,如果未能解决你的问题,请参考以下文章