我的应用程序中有一个带有4个选项卡的选项卡栏控制器。其中之一应该根据API的响应显示2个场景之一:如果没有数据,则显示为空白视图;如果有数据,则显示为分段控件。 以下是具有设置的情节提要:
在空视图和带有数据的视图上,我都有一个按钮,应“单击”选项卡栏上的按钮之一(切换到另一个选项卡)。
现在这就是我正在做的:
显示包含数据的视图:
class EmptyTasksVC: ViewController {
override func viewDidLoad() {
super.viewDidLoad()
if(there_is_data){
let storyboard = UIStoryboard(name: "TaskTodoList", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TaskListSegmentedControl")
let childNavigation = UINavigationController(rootViewController: vc)
childNavigation.willMove(toParent: self)
addChild(childNavigation)
childNavigation.view.frame = view.frame
view.addSubview(childNavigation.view)
childNavigation.didMove(toParent: self)
}
}
}
在具有数据的视图中找到按钮单击时的标签栏:
@objc func newTaskAction(sender: UIButton!) {
let viewController = self.findViewController()
let tabBar = viewController?.parent?.parent?.parent?.parent?.parent as! UITabBarController
tabBar.selectedIndex = 2
}
...
extension UIView {
func findViewController() -> UIViewController? {
if let nextResponder = self.next as? UIViewController {
return nextResponder
} else if let nextResponder = self.next as? UIView {
return nextResponder.findViewController()
} else {
return nil
}
}
}
如果我想从空白视图进入按钮,则必须从链中删除2个“父母”。
一定有更好的方法来做... 我的架构错了吗?如果我不知道正在路上有多少个视图,如何从嵌入式视图转到选项卡栏?
答案 0 :(得分:1)
ViewController
已经具有属性tabBarController
,其描述为
//如果视图控制器将标签栏控制器作为其祖先, 把它返还。否则返回nil。
因此您可以直接访问您的viewController嵌入的TabBar
Controller
,
self.tabBarController?.selectedIndex = 2