【问题标题】:Adding viewcontrollers in scrollview ios swift在scrollview ios swift中添加视图控制器
【发布时间】:2017-05-10 20:02:31
【问题描述】:

我有带滚动视图的 baseview 控制器。在该滚动视图中,我添加了三个视图控制器视图(xib)。所以我可以水平滚动这三个。在我的第一个视图控制器中,我正在显示一个 tableview。在运行我的应用程序时,它正在显示我所有的 3 个视图控制器。但是当我触摸我的 tableview 单元格时消失了。我在 xcode 7.3 中所做的一样。它工作正常。但在 xcode 8 中它不起作用。请帮我解决这个问题。我附上了我的示例代码

let scrollViewWidth:CGFloat = self.scrollContainer.frame.width
        let scrollViewHeight:CGFloat = self.scrollContainer.frame.height
        let x = CGFloat(i) * scrollViewWidth

        if i == 0{
            let qualification = EducationViewController (nibName: "EducationViewController", bundle: nil)
            //qualification.view.frame.size.height = scrollViewHeight
            //qualification.view.frame.size.width = scrollViewWidth
            qualification.view.frame.origin.x = x
            self.scrollContainer!.addSubview(qualification.view)
            qualification.didMove(toParentViewController: self)
        }
        else if i == 1{
            let state = StateRegistrationViewController (nibName: "StateRegistrationViewController", bundle: nil)
            //state.view.frame.size.height = scrollViewHeight
           // state.view.frame.size.width = scrollViewWidth
            state.view.frame.origin.x = x
            self.scrollContainer!.addSubview(state.view)
            state.view.backgroundColor = UIColor.red
            state.didMove(toParentViewController: self)
        }
        else if i == 2{
            let exp = ExperienceViewController (nibName: "ExperienceViewController", bundle: nil)
           // exp.view.frame.size.height = scrollViewHeight
           // exp.view.frame.size.width = scrollViewWidth
            exp.view.frame.origin.x = x
            self.scrollContainer!.addSubview(exp.view)
            exp.view.backgroundColor = UIColor.orange

            exp.didMove(toParentViewController: self)
        }}

【问题讨论】:

    标签: ios xcode uitableview uiscrollview xcode8


    【解决方案1】:
    1. 启动视图控制器

      let storyboard = UIStoryboard(name: "Main", bundle: nil)
      let aViewController = storyboard.instantiateViewController(withIdentifier: "A") as! AViewController;
      let bViewController = storyboard.instantiateViewController(withIdentifier: "B") as! BViewController;
      let cViewController = storyboard.instantiateViewController(withIdentifier: "C") as! CViewController;
      
    2. 将视图控制器添加到数组中

      let viewControllers = [aViewController, bViewController, cViewController]
      
    3. 运行将 viewControllers 添加到滚动视图的 for 循环

      var idx:Int = 0
      for viewController in viewControllers {
      
          addChildViewController(viewController);
          let originX:CGFloat = CGFloat(idx) * width;
          viewController.view.frame = CGRect(x: originX, y: 0, width: width, height: height);
          scrollView!.addSubview(viewController.view)
          viewController.didMove(toParentViewController: self)
          idx += 1;
      }
      

    全部完成!

    【讨论】:

      【解决方案2】:

      在滚动视图上添加自定义视图控制器的视图时,您还应该将自定义视图控制器添加为主控制器的子控制器。

      就像您的情况一样,您有三个自定义控制器,然后根据代码中的 if else 子句,您必须添加:

      self.addChildViewController(qualification)
      self.addChildViewController(state)
      self.addChildViewController(exp)
      

      在代码中的相应块中。

      你的代码会是这样的:

      let scrollViewWidth:CGFloat = self.scrollContainer.frame.width
              let scrollViewHeight:CGFloat = self.scrollContainer.frame.height
              let x = CGFloat(i) * scrollViewWidth
      
              if i == 0{
                  let qualification = EducationViewController (nibName: "EducationViewController", bundle: nil)
                  //qualification.view.frame.size.height = scrollViewHeight
                  //qualification.view.frame.size.width = scrollViewWidth
                  qualification.view.frame.origin.x = x
                  self.scrollContainer!.addSubview(qualification.view)
                  self.addChildViewController(qualification)
                  qualification.didMove(toParentViewController: self)
              }
              else if i == 1{
                  let state = StateRegistrationViewController (nibName: "StateRegistrationViewController", bundle: nil)
                  //state.view.frame.size.height = scrollViewHeight
                 // state.view.frame.size.width = scrollViewWidth
                  state.view.frame.origin.x = x
                  self.scrollContainer!.addSubview(state.view)
                  self.addChildViewController(state)
                  state.view.backgroundColor = UIColor.red
                  state.didMove(toParentViewController: self)
              }
              else if i == 2{
                  let exp = ExperienceViewController (nibName: "ExperienceViewController", bundle: nil)
                 // exp.view.frame.size.height = scrollViewHeight
                 // exp.view.frame.size.width = scrollViewWidth
                  exp.view.frame.origin.x = x
                  self.scrollContainer!.addSubview(exp.view)
                  self.addChildViewController(exp)
                  exp.view.backgroundColor = UIColor.orange
      
                  exp.didMove(toParentViewController: self)
              }}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 2014-12-23
        相关资源
        最近更新 更多