0

私は2つのタブを持つアプリケーションを書いています。最初のタブでは、ユーザーがいくつかの設定を選択します。次に、2番目のタブをクリックして、最初のタブの設定に基づいてカードをランダムに描画して表示します。 2番目のタブのビューの下部には、再シャッフルボタンがあります。私はすぐに2番目のタブに戻るように指示するオーバーライドされた準備(送信者:)の機能を持つ(カスタム)UITabBarViewControllerにボタンsegue'dを持っています。すべての同じことをここでいくつかの質問を読んだ後、私はすべてを正しくしていると確信しており、すべての答えによると、それはする必要があります。準備(for:送信者:)ボタンからタブバーコントローラへのセグの間に呼び出されない(Swift 4、Xcode 9)

ただし、最初のタブにのみ表示されます。 2番目のタブをもう一度クリックすると、それが改造され、新しいカードセットが正しく表示されるため、問題はありません。ただし、再シャッフルボタンがクリックされるたびに、prepare()は呼び出されないので、なぜ2番目のタブではなく最初のタブに移動するのですか。 prepare()が呼び出されないのはなぜですか?

storyboard

class MainTabBarViewController: UITabBarController { 

// var nextViewNumber = Int() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "reshuffleSegue") { 
     if let tabVC = segue.destination as? UITabBarController { 
      tabVC.selectedIndex = 2 
     } 
    } 
} 
} 

編集を追加する:意図した効果を得るための別の方法がありますならば、私の代わりにそれを使用させていただき

は、ここで私は、ストーリーボードやコードを持っているものです。

+0

確かです。ブレークポイントに到達しませんでした。 –

+0

準備()の最初の行 –

+0

はい、私はあなたの間違いを見ています。下の私の答えを見てください! – matt

答えて

0

prepare(for:)メソッドの実装を間違ったクラスに入れました。これは、タブビューコントローラではなく、ドローカードビューコントローラであるソースビューコントローラにあります。

しかし、あなたはストーリーボードにセグの悲惨なサイクルがあることにも注意してください。ドローカードからメインタブバーへのショーセグ、メインタブバーからドローカードへの親子関係があります。あなたのアプリは運命づけられています。あなたはあなたのアーキテクチャを完全に再考すべきです。

+0

どのクラスがそうでしょうか?私はDrawCardsTabBarControllerでそれを試しましたが、それはそれを呼び出すのではありません。 UIButtonにはprepare(for:source :)メソッドがありません。 –

+0

どのようなクラスになるか分かりません。あなたのストーリーボードです。どのクラスが再シャッフルボタンを制御しているかを見てください。 – matt

+0

ありがとう、それは今働いている。 DrawCardsTabBarControllerでしたが、別の問題がありました。コードのほんの少しの後、私はそれを働かせました:) –

関連する問題