0

我在 X-Code 上创建了一个单视图应用程序并创建了另一个视图控制器并尝试推送第二个视图控制器。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath
{   
if (self.statesView == nil)
{
    StatesView *newStateView = [[StatesView alloc]initWithNibName:@"StatesView" bundle:[NSBundle mainBundle]];
    self.statesView = newStateView;
}

[self.navigationController pushViewController:self.statesView animated:YES];
}

但是应用程序因 SIGABRT 信号而崩溃

4

3 回答 3

1

StatesView 是 ViewController 吗? pushViewController:需要一个UIViewController,而不是一个UIView

我认为您在点击 UITableView 中的一行时试图更改 ViewController。实现这一点的最简单和最好的方法是使用 segues。在你的故事板中,ctrl 拖动你的UITableViewCell并将它与你的新视图控制器链接。

如果您想以编程方式执行此操作,则需要使用:

[self.storyboard instantiateViewControllerWithIdentifier:@"StatesViewController"];
于 2012-07-24T09:26:47.663 回答
0

所以,你的StatesView实例(即newStateView)是一个 UIView 子类,所以它是一个视图,而不是一个控制器。您只能pushViewController在向其发送UIViewController子类时使用。您可以newStateView使用以下命令将您的添加到当前视图:

[self.view addSubview:self.statesView];

但这没有任何过渡。您可以使用动画视图属性[UIView animateWithDuration:animations:]

于 2012-07-24T09:23:47.247 回答
0

您可以像这样为视图之间的过渡设置动画

CATransition *transition = [CATransition animation];
transition.duration = 1.0;
transition.type = kCATransitionPush; //choose your animation
[viewController.view.layer addAnimation:transition forKey:nil];
[self.viewController1.view addSubview:viewController2.view];
不要忘记导入 QuartzCore 库!

于 2012-07-24T09:24:47.043 回答