如何在视图之间进行转换,每个视图都有自己的视图控制器?

时间:2012-07-24 09:19:46

标签: ios view

我在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信号

3 个答案:

答案 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 !!