ios - 动态加载的 UIStackView 上的分离 Controller 问题

标签 ios swift uiviewcontroller uistoryboard uistackview

我在某种特殊的架构中收到“不鼓励在分离 View Controller 上呈现 View Controller ”警告。并且 - 由此产生了一些相当大的用户界面问题。我的 Storyboard中有一个架构,其中有 2 个不同的、不相连的组。第一组是我的应用程序的主界面,包括 UIStackView。第二组由 UIView 和附加的弹出框组成,如下图所示。

enter image description here

我用最多 8 个组 2 的 UIView 实例动态填充组 1 的 UIStackView。这是在 UIStackView 子类中名为 loadViews() 的函数中完成的,该函数根据需要进行调用。以下是经过清理的伪代码以供说明:

for i in 0 ..< green.count {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let greenVC = storyboard.instantiateViewControllerWithIdentifier("greenViewController") as! GreenVC 
    greenVC.progressionStackView = self
    greenVC.index = i;

    greenViewControllers.append(greenVC)

    if let greenView = greenVC.view as! GreenView! {
        greenView.fillColor = UIColor.orangeColor()
        greenView.setNeedsDisplay()
        self.addArrangedSubview(greenView)
    }
}

self.layoutIfNeeded()

每次我在堆栈 View 中嵌入的绿色 View 之一上触发弹出窗口时,我都会收到上面的警告。更重要的是,当在分割 View 模式下在 iPad 上运行时,堆栈 View 每次都会丢失一个绿色 View ,直到没有为止。后者只是一个显示问题,因为刷新时所有 View 都会回来。

我完全被难住了,不知道如何解决这个问题或以不同的方式实现。如果问题是未附加加载的 View ,是否可以“重新附加”它们?或者有没有办法动态加载最多附加 256 个 View 的堆栈 View ?

最佳答案

已解决:

牢记 Xcode 警告的另一个教训 - 即使使用了“不鼓励”这个词。在这种情况下,事情往往会破裂。事后看来,解决方案是显而易见的。实例化为 greenVC 的新 View Controller 必须附加到包含的 View Controller - 即包含此 UIStackView 的 View 层次结构中的上几层:

vcContainingStackView.addChildViewController(greenVC)

上面的行在将 greenVC 附加到我添加的 View Controller 数组之前被调用。当然,现在在删除 GreenVC 实例的地方也必须调用removeFromParentViewController(),但除此之外就是这样了。警告消失了, View 消失的问题也消失了。

关于ios - 动态加载的 UIStackView 上的分离 Controller 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37739712/

相关文章:

ios - 我如何从UITableView更改为UIViewController

ios - 如何更改搜索栏中的边框和图标(Swift)

ios - 我可以在 Xcode 项目中使用 SVG 文件吗?

ios - 在 MKMapView 中使用 UILongPressGestureRecognizer 和可拖动的 MKPinAnnotationView

ios - MKMapView 未正确删除注释?

ios - Firebase 身份验证不插入新值

ios - 如何推迟【权限请求提醒】?

ios - 喜欢通过客户端使用两个 API 作为 IOS 应用程序(Swift)的功能实现

uiviewcontroller - iOS 6 ViewController 正在旋转但不应该

ios - 如何从 viewController 访问 Swift 3 中的另一个 viewController