如何从嵌入式视图进入标签栏?
How to get to a tab bar from the embedded view?
我的应用程序中有一个选项卡栏控制器,它有 4 个选项卡。其中之一应该根据 API 的响应显示 2 个场景之一:如果没有数据则为空视图,如果有数据则为分段控件。
以下是带有设置的故事板:
在空视图和包含数据的视图上,我有一个按钮应该 "click" 选项卡栏上的按钮之一(切换到另一个选项卡)。
现在我正在做的是:
正在显示包含数据的视图:
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 "parents"。
一定有更好的方法...
我的架构错了吗?如果我不知道途中有多少视图,如何从嵌入式视图进入标签栏?
A ViewController
已经有一个 属性 tabBarController
描述为
// If the view controller has a tab bar controller as its ancestor,
return it. Returns nil otherwise.
因此您可以直接访问 TabBar
Controller
您的 viewController 嵌入其中,
self.tabBarController?.selectedIndex = 2
我的应用程序中有一个选项卡栏控制器,它有 4 个选项卡。其中之一应该根据 API 的响应显示 2 个场景之一:如果没有数据则为空视图,如果有数据则为分段控件。 以下是带有设置的故事板:
在空视图和包含数据的视图上,我有一个按钮应该 "click" 选项卡栏上的按钮之一(切换到另一个选项卡)。
现在我正在做的是:
正在显示包含数据的视图:
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 "parents"。
一定有更好的方法... 我的架构错了吗?如果我不知道途中有多少视图,如何从嵌入式视图进入标签栏?
A ViewController
已经有一个 属性 tabBarController
描述为
// If the view controller has a tab bar controller as its ancestor, return it. Returns nil otherwise.
因此您可以直接访问 TabBar
Controller
您的 viewController 嵌入其中,
self.tabBarController?.selectedIndex = 2