ios - Swift 多个子视图并返回到原始 TableView
问题描述
我创建了自己的 TabView 第一个选项卡始终是Home选项卡,其中包含一个 TableView 。其他 3 个选项卡 Search、Menu 和 Inbox 是 subviews 。我可以从
- 主页搜索然后返回主页,它的工作原理
- 主页到菜单然后返回主页,它也可以工作
- Home to Menu 然后到 Search 并返回 Home 让我回到 Menu 子视图。我基本上想在单击 Home Tab 时消除所有子视图。此外,每个 TabView 都在它自己的控制器中。
这是我的代码
从主控制器到菜单控制器
@IBAction func MenuTabAction(_ sender: UIButton) {
let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MenuC") as! MenuC
self.addChildViewController(Popup)
Popup.view.frame = self.view.frame
Popup.view.tag = 100
self.view.addSubview(Popup.view)
Popup.didMove(toParentViewController: self)
}
从菜单控制器到主页控制器和搜索控制器
@IBAction func HomeTabAction(_ sender: UIButton) {
if let viewWithTag = self.view.viewWithTag(100) {
print("Tag 100")
viewWithTag.removeFromSuperview()
}
}
@IBAction func SearchTabAction(_ sender: UIButton) {
let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LocalSearchC") as! LocalSearchC
Popup.view.frame = self.view.frame
Popup.view.tag = 100
self.view.addSubview(Popup.view)
Popup.didMove(toParentViewController: self)
}
我猜测删除超级视图一次只删除 1 个超级视图,所以如果我从 Subview1 转到 subview2 然后单击 HomeTab 它会将我带到 subview1 而不是原来的 HomeTab 。单击“主页”选项卡时有没有办法删除所有超级视图/子视图?
解决方案
每个选项卡都有自己的视图控制器。理想情况下,您应该removeFromSuperview
所有未显示的控制器。
在您的代码中,您只能removeFromSuperView
在HomeTabAction
.
尝试改变它:
if let viewWithTag = self.view.viewWithTag(100) {
print("Tag 100")
viewWithTag.removeFromSuperview()
}
至
for v in self.view.subviews {
if v.tag == 100 {
v.removeFromSuperview()
}
}
但是请记住,每次用户按下任何选项卡而不返回主页时(即:在菜单和搜索之间点击多次),看起来您只是在实例化许多控制器,而没有删除它们。
每次实例化一个新视图时,您都应该删除其他视图。明智的做法是给每个视图控制器一个唯一的标签,并在每次更改后删除隐藏的其他标签,而不仅仅是在返回主页时。或者至少,在创建新视图控制器之前检查是否已经实例化了具有给定类型的视图控制器。
推荐阅读
- java - 显示带百分号的数字键盘
- typescript - 对 TypeScript 中的可选链接感到困惑
- node.js - nodejs - 将一个 obj 转换为一些对象
- android - 如何在 Jetpack compose 的第一个lazyrow中添加添加图像?
- python - python中的元组键字典:访问整个条目块
- mongodb - Mongo DB Atlas 与 Azure cosmos DB Mongo API
- python - 实现启动画面时,pyimage 不再存在
- autocad - AutoCAD中的导入层状态如何工作?
- linux - 带有升序后缀的 mkdir 和 mv 一个文件到每个文件夹
- javascript - 基于用户权限的隐藏/显示元素 - Fliplet