0

X-Codeで単一のViewアプリケーションを作成し、別のView Controllerを作成して、2番目のViewControllerをプッシュしてみました。

- (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:が必要です。UIViewControllerUIView

UITableView の行をタップしているときに、ViewController を変更しようとしていると思います。これを実現するためのより簡単で最良の方法は、セグエを使用することです。ストーリーボードで、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 に答える