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