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

Ios 如何在视图之间转换,每个视图都有自己的视图控制器?,ios,view,Ios,View,我在X-Code上创建了一个单视图应用程序,创建了另一个视图控制器,并尝试推送第二个视图控制器 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (self.statesView == nil) { StatesView *newStateView = [[StatesView alloc]initWithNibName:@"Sta

我在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信号而崩溃,因此,您的
状态视图
实例(即
newStateView
)是UIView子类,因此它是视图,而不是控制器。只有在向其发送
UIViewController
子类时,才能使用
pushViewController
。您可以使用以下方法将
newStateView
添加到当前视图:

[self.view addSubview:self.statesView];

但这样做没有任何过渡。您可以使用
[UIView animateWithDuration:animations:

设置视图属性的动画。您可以像这样设置视图之间转换的动画

CATTransition*转换=[CATTransition动画];
过渡时间=1.0;
transition.type=kCATransitionPush//选择您的动画
[viewController.view.layer addAnimation:transition-forKey:nil];
[self.viewController1.view addSubview:viewController2.view];

别忘了导入QuartzCore库

StatesView是视图控制器吗?
pushViewController:
需要一个
UIViewController
,而不是
UIView

我认为当您在UITableView中点击一行时,您正在尝试更改ViewController。 实现这一点的最简单和最好的方法是使用segues。在情节提要中,按住ctrl键拖动
UITableViewCell
,并将其与新的视图控制器链接

- (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];
}
如果要以编程方式执行此操作,则需要使用:

[self.storyboard instantiateViewControllerWithIdentifier:@"StatesViewController"];

请提供更多详细信息(崩溃错误等)。我的状态视图是UIViewController本身的一个子类。哦,好的,你能告诉我崩溃消息说什么吗?程序收到信号。西加布蒂,我想在没有storyboard@user730304你有什么理由不使用故事板吗?此外,您应该将类名更改为以“ViewController”结尾的名称。