2017-04-09 8 views
0

私は5つのタブバー項目を持つTabBarControllerを持っています。それらのすべてはナビゲーションコントローラを指し、次にビューコントローラを指す。それらのうちの1つは、タブバーなしでビューコントローラを表示したいのですが、ユーザーがキャンセルを押すと、選択済みの以前のタブバーアイテム/ビューに戻るはずです(以前は冗長性について申し訳ありません)。それらはすべて、 "関係"ビューコントローラ "によって"ビューの名前 "にリンク/参照されていますが、特定のセグや何かを持っていません。TabBarを表示し、閉じたときに以前選択したビューに戻る

これは、 のviewDidLoad機能に呼び出す:

func setupMiddleButton() { 
    let menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 64, height: 64)) 
    var menuButtonFrame = menuButton.frame 
    menuButtonFrame.origin.y = self.view.bounds.height - menuButtonFrame.height 
    menuButtonFrame.origin.x = self.view.bounds.width/2 - menuButtonFrame.size.width/2 
    menuButton.frame = menuButtonFrame 

    menuButton.backgroundColor = UIColor.white 
    menuButton.layer.cornerRadius = menuButtonFrame.height/2 

    menuButton.setImage(UIImage(named: "klein_fototoestel_2"), for: UIControlState.normal) // 450 x 450px 
    menuButton.contentMode = .scaleAspectFit 
    menuButton.addTarget(self, action: #selector(menuButtonAction), for: UIControlEvents.touchUpInside) 

    self.view.addSubview(menuButton) 


    self.view.layoutIfNeeded() 
} 

func menuButtonAction(sender: UIButton) { 
    self.selectedIndex = 2 
} 

私は中央のボタンが選択されたときにこの関数が呼び出されることはありません次のコードしかしでタブバーコントローラを委譲することによって、私は必要な動作を実行しようとしました(ただし、正しい表示が.. ..):

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 

    print("the selected index is : \(tabBar.items?.index(of: item))") 
} 

私が本当に知りたいのは、私が望むその振る舞いを実装する正しい方法は何かです。以前はすべてのビューにnavigationControllerがあることを覚えておいてください。以前のコントローラのインデックスを格納するためにUserDefaultsを使用することを提案する多くの人を読んだが、正直言ってそれは適切だとは思わない。

何か助けていただければ幸いです。

ありがとうございます。

+0

をうーん....あなたは5つのタブとタブバーを持っていますか?タブ1,2,4,5はそれぞれビューコントローラに関連付けられていますが、タブバー3はタブバー自体をカバーするビューを表示しますか?そのビュー内のボタンがビューを削除し、アクティブなタブのいずれかに戻ります。それは正しいと思いますか? – DonMag

+0

and ... 'setupMiddleButton()'と 'menuButtonAction()'はどちらもサブクラス化タブバーコントローラにありますか? and ... 'menuButtonAction()' *はボタンタップで呼び出されていますか? – DonMag

+0

ちょっとドン。まったく!前もって感謝します! – user2116499

答えて

0

私はあなたが正しい軌道に乗っていたと思います。正しい接続を取得する必要があります。

この図では(新しいタブで開くと少し読みやすい)、「標準」のUITabBar構造が表示されます。キーは、第三のタブとしてデフォルト「何もしない」ビューコントローラを入れて、その後、コードを介してロードされます「特別な」ビューコントローラ追加されます。

その後enter image description here

、あなたの「アクション」機能を以下のようになります。

func menuButtonAction(sender: UIButton) { 

    // Don't navigate to the tab index 
    //self.selectedIndex = 2 

    // instead, load and present the view you really want to see 

    if let vc = storyboard?.instantiateViewController(withIdentifier: "SpecialVC") as? SpecialViewController { 

     vc.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext 

     self.present(vc, animated: true, completion: nil) 

    } 
} 

あなたはここで働い例を参照してダウンロードすることができます:https://github.com/DonMag/SWTabsWithSpecialTab

+0

恐ろしい、ドン。どうもありがとうございました。 – user2116499

関連する問題