代码之家  ›  专栏  ›  技术社区  ›  radioaktiv

将数据传递给ViewController

  •  2
  • radioaktiv  · 技术社区  · 8 年前

    我正在努力解决以下问题:

    我有一个 ViewController 和一个单独的 UIView

    class MyViewControllerA: UIViewController {
    override func loadView() { 
            self.view = MyViewControllerAView()
        }
    }
    

    以上都很好。

    然后在我的 MyViewControllerAView UIViewControllers MyViewControllerA 通过使用委托:

    class MachineHomeView: UIView, ThirdPartyUIComponentDelegate {
    
            //code ...
    
            func thirdPartyUIComponent(_ thirdPartyUIComponent: ThirdPartyUIComponent, viewControllerAt index: UInt) -> UIViewController {
                switch index {
                case 0:
                    return MyViewControllerC()
                case 1:
                    return MyViewControllerC()
                //..more code
                }
            }
        }
    

    用户界面看起来像:

    enter image description here

    简而言之,我有一个 ViewControllerA View 加载两个附加的ViewController- ViewControllerB ViewControllerC

    看法 Controller 相互之间。

    问题 我面临的问题是,我想从 MyViewControllerA MyViewControllerB MyViewControllerC .

    我想到的第一件事是在 我的视图控制器视图 e、 g已调用 test viewWillLoad viewDidLoad 我可以把东西传给它,比如:

    self.view.test = "some data"

    然后在我实例化两个附加视图控制器的委托中,我可以执行以下操作:

    func thirdPartyUIComponent(_ thirdPartyUIComponent: ThirdPartyUIComponent, viewControllerAt index: UInt) -> UIViewController {
                    switch index {
                    case 0:
                         let myViewControllerB = MyViewControllerB()
                         myViewControllerB.someProperty = self.test
                        return myViewControllerB
                    case 1:
                   let myViewControllerC = MyViewControllerC()
                         myViewControllerC.someProperty = self.test
                        return myViewControllerC
                    }
                }
            }
    

    在我看来,这样做打破了MVC惯例,因为视图不再只是UI负责。因此,我希望避免这种情况,保持MVC的整洁。

    关于如何从 MyViewControllerA MyViewControllerB MyViewControllerC

    2 回复  |  直到 8 年前
        1
  •  2
  •   Milan Nosáľ    8 年前

    我认为你应该用以下方式处理这个问题。

    thirdPartyUIComponent(_:) 方法,共个 MyViewControllerAView MyViewControllerA -我认为MVC中的视图不适合实例化和处理视图控制器。现在 B C

    然后,因为我希望您需要访问 B C 我的视图控制器视图 ,直接传递给 -但是,仅传递的视图 B C ,而不是视图控制器本身。

    这条路 A 视图控制器将管理视图控制器 B C ,但 我的视图控制器视图 仍然可以访问 B.view C.view 正确地布置它们。

    P、 美国:如果 第三方组件(_:) 当用户在上触发某些UI操作时,应调用回调 我的视图控制器视图 MyViewControllerA 干净地处理它。

        2
  •  1
  •   Jacek Głazik    8 年前

    UView不应该创建UIViewController并自己管理它们。制作 ViewControllerA 负责管理 ViewControllerC . 最好的方法是制作 B C A的子视图控制器。您可以与父视图控制器通信 A. 由代表执行。 苹果教程如何做到这一点: https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

    然而,米兰的解决方案也可以。