2

ストーリーボードに2つのビューコントローラーがあります。プログラムで1つ目から2つ目へのナビゲートに成功しました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
YourViewController *yourViewController = (YourViewController *)[storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];

Interface Builderを使用せずに、 customSegueを使用して他のページに移動したい。pushViewController

これは、InterfaceBuilderで簡単に使用できるカスタムSegueです。

@interface LeftToRightSegue : UIStoryboardSegue

プログラムでやってみませんか?

4

5 に答える 5

8

これが私がやった方法です。セグエ サブクラスを作成し、自分の sourceViewController IE からそれを呼び出し、destinationViewcontroller を初期化してから、それらをカスタム セグエ クラスに渡します。

YourViewController *yourViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"YOURStoryboardViewControllerID"];
CustomSegueClass *segue = [[CustomSegueClass alloc] initWithIdentifier:@"ANYid" source:self destination:yourViewController];
[segue perform ];
于 2012-10-25T22:04:05.247 に答える
3

特定のタイプのセグエが 2 つの要素の間に存在する必要があることと、それを識別する方法をスト​​ーリーボードに通知するには、インターフェイス ビルダーを使用する必要があると思います。を使用してコードでトリガーできperformSegueWithIdentifier:ますが、ドキュメントによると、実際にコードで作成することはできません。

「アプリがセグエオブジェクトを直接作成することはありません。セグエがトリガーされると、iOS によって常に作成されます。」

于 2012-10-20T21:59:28.733 に答える
2

Phillip Mills が書いたように、IB でセグエを作成する必要があります。あるView Controllerから別のView ControllerにCtrlキーを押しながらドラッグし、表示されるメニューから[カスタム]を選択することで実行できます。次に、新しいセグエを選択し、属性インスペクターを開きます。セグエの識別子を入力し、そのクラスを実装したクラスの名前に設定します。これらの手順を完了すると、 を使用できますperformSegueWithIdentifier:

于 2012-10-20T22:22:13.110 に答える
1

ナビゲーションコントローラーを使用する必要がないように、カスタムセグエのサブクラスをどのように実装する必要があるかを尋ねていると思いますか?

はいの場合、次のようにクラスのperformメソッドをオーバーライドします。LeftToRightSegue

- (void)perform
{
  UIViewController *source = self.sourceViewController;
  UIViewController *destination = self.destinationViewController;

  UIWindow *window = source.view.window;

  CATransition *transition = [CATransition animation];
  [transition setDuration:1.0];
  [transition setTimingFunction:[CAMediaTimingFunction functionWithName:UIViewAnimationOptionCurveEaseInOut]];
  [transition setType:kCATransitionPush];
  [transition setSubtype:kCATransitionFromRight];
  [transition setFillMode:kCAFillModeForwards];
  [transition setRemovedOnCompletion:YES];


  [window.layer addAnimation:transition forKey:kCATransition];
  [window setRootViewController:self.destination];
}

プッシュとは異なるものが必要な場合は、アニメーションのタイプを変更できます。また、QuartzCoreをインポートすることを忘れないでください:

#import <QuartzCore/QuartzCore.h>
于 2012-10-20T22:33:35.747 に答える