0

2つの異なるビューコントローラーに接続する2つの異なるセグエを持つビューコントローラーがあり、両方のコントローラーにキャンセルボタンを実装する必要があります。両方のコントローラーでキャンセルボタンを押すと、ビューは最初のビューに戻ります。コントローラ。私の質問は、ボタンをどのように実装できますか?このコードを試してみると、コンパイラの警告:メソッド「cancel:」の複数の宣言が見つかり、無視されました。ありがとうございます。

インターフェース:

-(IBAction)cancel:(UIStoryboardSegue *)segue;    
-(IBAction)done:(UIStoryboardSegue *)segue;    
-(IBAction)cancel:(UIStoryboardSegue *)segue;

実装:

-(IBAction)done:(UIStoryboardSegue *)segue    
{
    if([[segue identifier] isEqualToString:@"ReturnInput"]){            
        AddSightingViewController *addController = [segue sourceViewController];            
        if (addController.birdSighting) {

            [self.dataController
             addBirdSightingWithSighting:addController.birdSighting];

            [[self tableView]reloadData];                
        }            
        [self dismissViewControllerAnimated:YES completion:NULL];
    }
}


-(IBAction)cancel:(UIStoryboardSegue *)segue    
{        
    if([[segue identifier] isEqualToString:@"CancelInput"]){            
        [self dismissViewControllerAnimated:YES completion:NULL];            
    }
}
4

3 に答える 3

0

戻りたくない場合は、アンワインド セグエを実装する必要があります。

これを行うには、元のビュー コントローラー (戻りたいビュー コントローラー) に戻るメソッドを定義します。メソッドを空のままにすることができます。

- (IBAction)methodName:(UIStoryboardSegue *)segue
{
}

次に、IB ctrl + ボタン (またはビュー コントローラー) から緑色の「終了」アイコンにドラッグします。ポップアップ メニューから methodName を選択します。ビューコントローラーから実行した場合は、セグエに識別子を設定し、ボタンアクションから performSegueWithIdentifier: で呼び出します。

考慮事項:

  • メソッド名は、ストーリーボード上のすべてのビュー コントローラーで検出されます。

  • 異なるビュー コントローラーで同じメソッド名を定義できますが、アンワインド セグエを実行すると、ナビゲーション パスの最新のものに戻ります。

于 2013-04-04T09:44:57.917 に答える
0

あなたが何をしようとしているのかわからない。しかし、キャンセル メソッドは、メイン ビュー コントローラーではなく、2 つの子ビュー コントローラーにある必要があると思います。各コントローラーに 1 つ (および各ビューに 1 つのキャンセル ボタン)。そうすれば、メソッドの複数の宣言で問題が発生することはありません。

于 2013-02-22T18:09:07.537 に答える
0

あなたのコードから、キャンセルのために終了セグエを使用している(または使用したい)と結論付けています。

まず、最初のビュー コントローラーで cancel メソッドのメソッド宣言と実装を 1 つだけ持つ必要があります。ストーリーボードで、キャンセル ボタンから緑色の終了アイコンにコントロールをドラッグしてビュー コントローラーを吹き飛ばし、最初のビュー コントローラーで定義されたキャンセル メソッドを選択して、終了セグエを作成します。両方のView Controllerに対してこれを行います。また、ストーリーボードで出口セグエに異なる識別子を与える必要があります (識別子を変更するには、ドキュメント アウトラインでセグエを選択する必要があります)。

次に、最初のビュー コントローラーのキャンセル メソッドは次のようになります。

-(IBAction)cancel:(UIStoryboardSegue *)segue    
{
    if([[segue identifier] isEqualToString:@"CancelInput1"]) {
        // Do something
    } else if([[segue identifier] isEqualToString:@"CancelInput2"]) {
        // Do something different
    }
}

キャンセル時に何もしたくない場合は、メソッドを空のままにしてください。

于 2013-02-22T18:23:35.583 に答える