2016-06-27 9 views
1

私は、同じビューを使って項目を追加/編集するシステムでTableViewControllerを使用するアプリケーションをやっています。 (ただし、あなたがアイテムを追加するときにビューがモーダル提示され、あなたが編集したときにそれが示されている)アンワインドセグがうまくいきません

私は基本的に私のストーリーボードがセグエ行くこの

storyboard

のように見えるアップルから大きなstarter tutorialを追いましたナビゲーションコントローラは追加用で、もう1つは編集用です。 (私はチュートリアルに従ってすべてをやった)。

私は、キャンセルアイテムバーのボタンとViewControllerの終了アイコンの間にセグを行い、ビューがモーダルに表示されたとき(アイテムを追加しようとしたとき)にうまく動作します。

しかし、セルをクリックして表示されているセグを表示すると(アイテムを編集するために)、ナビゲーションバーの両方の項目が機能しなくなります。 prepareForSegueメソッドはもはや呼び出されません。だから私はキャンセルまたは保存することはできません。

私はViewControllerを自分自身と出口アイコン間のアンワインドセグエを作成しようと、このようにプログラム的にそれを呼び出すために:

@IBAction func testButton(sender: UIBarButtonItem) { 
    print("we're inside") 
    self.performSegueWithIdentifier("cancelSegue", sender: self) 
    print("so what now") 
} 

、私はそれを編集しようとするとちょうど示すことによって、それが結果、キャンセルボタンをタップ2つのログメッセージとその種類は、performSegueWithIdentifierメソッドをスキップします。しかし、追加はまだうまく動作します。

私は何か間違っているのですか、または巻き戻しの問題についていくつかの基本的な考え方を誤解していますか?

答えて

1

これはあなたの問題のかなり奇妙な解決策のようです。なぜあなたのunwind segueが2番目のケースで動作していないのかについては特に言及することはできませんが、2つの異なる方法で表示しているので、事態はかなり複雑になり始めます。

我々が使用する一般的な方法は、次のとおりです。

  1. は、資産を作成し、更新するための2つの完全に異なるビューコントローラを使用してください。いくつかの重複したコードかもしれませんが、他の人が作業するのがやや簡単になります。
  2. ボタンの作成と更新に同じビューコントローラを使用します。アイテムを編集している場合は、prepareForSegueを使ってビューコントローラに渡すことができます。ビューコントローラがロードされると、アイテムが存在する場合、ボタンの動作、タイトルなどを変更できます。アイテムが存在しない場合は、新しいアイテムを作成することがわかります。
  3. ほとんどの実装では、プログラムでビューを閉じるのがはるかに簡単です。 (つまり、ちょうど同じナビゲーションコントローラのスタック内のVCに戻るためのモーダルビューと[self.navigationController popViewControllerAnimated:YES]ため[self dismissViewControllerAnimated:NO completion:nil]

更新

あなたは、最初のビューコントローラの終了アイコンに[キャンセル]ボタンをリンクしましたまたは2番目のビューコントローラー(キャンセルと保存ボタンを持つもの)?

+0

私はあなたのアプローチを使って別の方法を見つけようとしています。(私はキャンセルボタンと2番目のビューの終了アイコンをリンクしました) –

+0

ああ、私はキャンセルボタンが終了アイコンに行く必要があります**正しく動作するための最初の**表示。 – Greg

関連する問題