- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用此代码(来自 this 答案)以及分段控件在容器 View 中的 viewController 之间切换,同时我使用它在第二个容器 View 中显示另一个 viewController相同的 View Controller 。因此,我必须注释掉删除先前 VC 的原始代码,以便嵌入两个容器 View 。 (1)如何清理之前的VC? (2) 请注意,我还将依赖项注入(inject)到子 VC 中,这样可以吗?
class ViewEmbedder {
class func embed(parent:UIViewController,date: Date, container:UIView, child:UIViewController, previous:UIViewController?){
// if let previous = previous {
// print("previous = \(previous.description)")
//// if previous != ScoreAndStatsTableViewController {
//// //remove
//// }
//
// removeFromParent(vc: previous)
// }
child.willMove(toParentViewController: parent)
if let hdtvc = child as? HealthDataTableViewController {
hdtvc.startDate = date
}
if let idtvc = child as? IceDataTableViewController {
idtvc.startDate = date
}
if let stvc = child as? ShiftTableViewController {
stvc.startDate = date
}
parent.addChildViewController(child)
container.addSubview(child.view)
child.didMove(toParentViewController: parent)
let w = container.frame.size.width;
let h = container.frame.size.height;
child.view.frame = CGRect(x: 0, y: 0, width: w, height: h)
}
class func removeFromParent(vc:UIViewController){
vc.willMove(toParentViewController: nil)
vc.view.removeFromSuperview()
vc.removeFromParentViewController()
}
class func embed(withIdentifier id:String, startDate: Date, parent:UIViewController, container:UIView, completion:((UIViewController)->Void)? = nil){
let vc = parent.storyboard!.instantiateViewController(withIdentifier: id)
embed(
parent: parent,
date: startDate,
container: container,
child: vc,
previous: parent.childViewControllers.first
)
completion?(vc)
}
}
用法:
class KingViewController: UIViewController {
var startDate = Date()
@IBOutlet weak var topContainerView: UIView!
@IBOutlet weak var bottomContainerView: UIView!
@IBAction func controlDidChange(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
ViewEmbedder.embed(withIdentifier: "IceDataTableViewController", startDate: startDate, parent: self, container: bottomContainerView) { (bvc) in
}
case 1:
ViewEmbedder.embed(withIdentifier: "HealthDataTableViewController",startDate: startDate, parent: self, container: bottomContainerView) { (bvc) in
}
case 2:
ViewEmbedder.embed(withIdentifier: "ShiftTableViewController", startDate: startDate, parent: self, container: bottomContainerView) { (stvc) in
}
最佳答案
这感觉有点像黑客,但这就是我在嵌入新的 VC 之前清理现有 VC 时想到的:仍然对任何更有说服力的建议持开放态度。
import Foundation
import UIKit
class ViewEmbedder {
class func embed(id: String, parent:UIViewController,date: Date, container:UIView, child:UIViewController, previous:UIViewController?){
let childVCArray = parent.childViewControllers
for vc in childVCArray {
print(vc.description)
let vcID = vc.restorationIdentifier
if vcID != id {
vc.removeFromParentViewController()
}
}
child.willMove(toParentViewController: parent)
if let hdtvc = child as? HealthDataTableViewController {
hdtvc.startDate = date
}
if let idtvc = child as? IceDataTableViewController {
idtvc.startDate = date
}
if let stvc = child as? ShiftTableViewController {
stvc.startDate = date
}
parent.addChildViewController(child)
container.addSubview(child.view)
child.didMove(toParentViewController: parent)
let w = container.frame.size.width;
let h = container.frame.size.height;
child.view.frame = CGRect(x: 0, y: 0, width: w, height: h)
}
class func removeFromParent(vc:UIViewController){
vc.willMove(toParentViewController: nil)
vc.view.removeFromSuperview()
vc.removeFromParentViewController()
}
class func embed(withIdentifier id:String, startDate: Date, parent:UIViewController, container:UIView, completion:((UIViewController)->Void)? = nil){
let vc = parent.storyboard!.instantiateViewController(withIdentifier: id)
embed(
id: id,
parent: parent,
date: startDate,
container: container,
child: vc,
previous: parent.childViewControllers.first
)
completion?(vc)
}
}
关于ios - 将 ViewController 嵌入到一个主视图 Controller 的多个 ContainerView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48435602/
我使用 Xcode 和 Swift 制作了一个 iOS 应用程序。 一个 ViewController 包含两个 ContainerView。用户可以使用 SegmentedControl 在它们之间
我有一个设置,我使用导航 Controller ,其中包括一个嵌入页面 View Controller 及其内容的容器 View 。 从左起:UINavigationController,我的类 MT
我想使用容器 View 来包含一个 Collection View 的三个实例。 我的网点是: @IBOutlet weak var topContainer: UIView! @IBOutlet w
我想创建带有阴影和圆形边缘的自定义 ContainerView。此 ContainerView 以小矩形的形式放置在另一个 UIView 的顶部。在这种特殊情况下,使用 CoreGraphics 添加
我有一个 ViewController 和一个 Container View,它有一个嵌入式 TableViewController。 现在我想访问 ViewController 中的 TableVi
使用带有嵌入序列的 ContainerView 我得到这个: * 由于未捕获的异常“NSInvalidUnarchiveOperationException”而终止应用程序,原因:“无法实例化名为 U
我想使用自动布局实现期望的行为(或者如果这不可能使用委托(delegate)或其他东西)。我有一个带有一个静态单元格的 tableView,这个单元格有一个 containerView,它有一个带有动
我的情况是,现在我的应用程序使用 12 个 ViewController。 每个都有两个 ContainerView,它们拥有相同的控件集(我将它们称为控制组),并通过 segues 显示它们。 到目
我有我的 UIViewController ,这是一个人的个人资料页面,它显示他们的姓名和照片。其中UIViewController我有一个 UIContainerView显示静态 UITableVi
我在从一个 containerview 传递到另一个 UIViewController 时遇到了麻烦 下图展示了我想做的事情的 Storyboard。 我的应用程序有一个 Containerview,
我有三个按钮和一个 UIView(我称它为 containerView),点击每个按钮,containerView 将显示一个 View 在通过自定义 segue 的 UIViewController
我是 Swift 的新手,需要帮助将数据从 TableViewCell 传递到 ContainerView 以更改标签的某些文本。 我当前的状态是将数据从 TabelViewCell 传递到 View
我正在尝试从显示它的 UIViewController 更新 iOS 上 ContainerView(嵌入 UIView 中的 UIViewController)的界面内容。但是,ContainerV
我有一个嵌入了 UIViewController(名为 embedVC)的 containerView。 在 embedVC 中,我想模态另一个 ViewController(名为 modalVC),
我创建了一个 UIViewController,其中包含一个包含 UITableViewController 的 ContainerView。在 ParentViewController 的 View
我是 Swift 的新手,我正在尝试学习如何以编程方式构建 iOS 应用程序,但对 Storyboard 的使用非常有限。现在,目标是在应用程序顶部创建一个菜单,其中将包含按钮。根据我的研究,执行此操
我有一个 ViewController 和两个重叠的 ContainerViews。 但我没有找到如何在 RootViewController 中从 ContainerView 获取子对象的方法。 最
如果通过界面生成器使用 socket ,我知道如何将 ViewController 添加到容器中。您只需将导出从容器拖到 ViewController 和 boom,一切就绪。但是当谈到以编程方式进行
我有这个代码: 主视图.swift func showSubViewInContainerView(view: String, parms: Int){ let controller
我有这个 Storyboard: 和这段代码: var actualVisibleView : String? = nil func showSubViewInContainerView(view:
我是一名优秀的程序员,十分优秀!