我在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信号
答案 0 :(得分:1)
StatesView是ViewController吗?
pushViewController:
需要UIViewController
,而不是UIView
。
我认为您在UITableView中点击一行时尝试更改ViewController。
实现这一目标的更简单和最好的方法是使用segues。在您的故事板中,按住Ctrl键拖动UITableViewCell
并将其与新视图控制器链接。
如果您想以编程方式执行此操作,则需要使用:
[self.storyboard instantiateViewControllerWithIdentifier:@"StatesViewController"];
答案 1 :(得分:0)
所以,你的StatesView
实例(即newStateView
)是一个UIView子类,所以它是一个视图,而不是一个控制器。您只能在向其发送pushViewController
子类时使用UIViewController
。您可以使用以下内容将newStateView
添加到当前视图中
[self.view addSubview:self.statesView];
但这没有任何过渡。您可以使用[UIView animateWithDuration:animations:]
答案 2 :(得分: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 lib !!