4

私は iOS でカスタム セグエをいじっており、可能な限りそれらを使用して、アプリケーションの完全なワークフローをストーリーボードで視覚化できるようにしています。ポップオーバー セグエを作成すると、ビューがセグエをトリガーすることを認識します (ポップオーバーを配置するために必要です) が、カスタム セグエを作成すると、同じ方法を見つけることができません。カスタム セグエでセグエを開始したビューにアクセスする方法はありますか? また、View Controller にランタイム引数を渡すことができるように、Interface Builder からセグエにカスタム パラメータを渡す方法はありますか?

4

1 に答える 1

6

メソッドを実装することで、カスタム セグエをトリガーしたビューにアクセスできます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

...ビューコントローラーで。

そのメソッドでは、Interface Builder を使用してリンクした場合、sender の値はセグエをトリガーしたビューになります。このメソッドを実装するときは、次の方法でどのセグエがトリガーされたかを照会することをお勧めします。

if ([[segue identifier] isEqualToString:@"segueid"])

... "segueid" は、Interface Builder でセグエに指定した識別子です。

2 番目の質問については、Interface Builder でセグエのパラメーターを指定する方法がわかりませんが、同じ「prepareForSegue」メソッドを使用して、実行時にビュー コントローラーからパラメーターを渡すことができます。

カスタム セグエにanimationStyleというプロパティがあるとします。

performメソッドの場合、次のものを使用できます。

- (void)perform
{
    switch (self.animationStyle) {
        case 0:
            // TODO Perform animation type 0
        case 1:
            // TODO Perform animation type 1
    }
}

次に、そのカスタム セグエを使用するビュー コントローラーがいくつかあるとします。最初のものでは、次のように performSegue メソッドを実装できます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"yourCustomSegueID"]) {
        ((YourCustomSegueClass *)segue).animationStyle = 0;
    }
}

2番目のView Controllerでは、次のように実装できます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"yourCustomSegueID"]) {
        ((YourCustomSegueClass *)segue).animationStyle = 1;
    }
}

...効果的に、同​​じカスタム セグエ クラスを再利用して、さまざまな効果を得ることができます。IB ではセグエを直接設定できないことは確かですが、私の知る限り、それを回避する方法はありません。

于 2012-05-04T06:24:30.050 に答える