【发布时间】:2019-04-10 12:46:32
【问题描述】:
我的应用程序中有一个标签栏控制器,它有 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 个“父母”。
必须有更好的方法来做到这一点... 我的架构错了吗?如果我不知道有多少视图在路上,如何从嵌入视图进入标签栏?
【问题讨论】:
标签: swift uitabbarcontroller navigationcontroller