私は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を使用することを提案する多くの人を読んだが、正直言ってそれは適切だとは思わない。
何か助けていただければ幸いです。
ありがとうございます。
をうーん....あなたは5つのタブとタブバーを持っていますか?タブ1,2,4,5はそれぞれビューコントローラに関連付けられていますが、タブバー3はタブバー自体をカバーするビューを表示しますか?そのビュー内のボタンがビューを削除し、アクティブなタブのいずれかに戻ります。それは正しいと思いますか? – DonMag
and ... 'setupMiddleButton()'と 'menuButtonAction()'はどちらもサブクラス化タブバーコントローラにありますか? and ... 'menuButtonAction()' *はボタンタップで呼び出されていますか? – DonMag
ちょっとドン。まったく!前もって感謝します! – user2116499