【问题标题】:Delegate on subView委托子视图
【发布时间】:2017-12-11 19:33:53
【问题描述】:

我有 4 个UIViewController,分别是 vcA、vcB、vcC 和 vcD。现在,vcB 有一个有两行的tableView。 vcB 在 vcA 上被 subViewed 一半,就像 iPad 的设置屏幕一样。到这里为止,它工作正常,但我需要如果我点击 vcB 的 tableView 的第一个单元格,然后 vcC 应该在另一半侧被 subViewed,同样通过选择 vcB 的 tableview 的第二个单元格 vcD 应该被 subViewed 并且 vcC 应该被删除。

这是我的屏幕:

假设您选择“选择国家”,其他 vcC 的视图应该通过选择“通知”进行子查看和类似的,vcD 应该被子查看并且 vcC 应该被删除。 ,不要担心框架,我会设置的。并假设这里的父视图是vcA。

在这里,我尝试使用delegate,但我认为在子视图上delegate 不起作用,可以通过NSNotificationCenter 实现,但还有其他方法吗?

谢谢任何帮助将不胜感激。

更新

按照我用于获取结果的方式。但我知道这不是正确的方法,也没有发生我想要的。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        print(indexPath.section)
        print(indexPath.row)
        if UIDevice.Display.typeIsLike == UIDevice.DisplayType.ipad {

            let iPadVc = iPadSettingViewController()

            if indexPath.section == 0 && indexPath.row == 0 {

                var sliderVC: SettingsViewController! = nil

                sliderVC = self.storyboard?.instantiateViewController(withIdentifier: "SettingsViewController") as! SettingsViewController

                sliderVC.view.frame = CGRect(x:0, y: 64, width: CGFloat((iPadVc.view.frame.size.width)/2.4), height: CGFloat(iPadVc.view.frame.size.height-64))
                iPadVc.view?.addSubview(sliderVC.view)


            }
            else if indexPath.section == 0 && indexPath.row == 2 {

                var countryVC : CountryViewController! = nil

                countryVC = self.storyboard?.instantiateViewController(withIdentifier: "CountryViewController") as! CountryViewController

                countryVC.view.frame = CGRect(x:CGFloat((iPadVc.view.frame.size.width)/2.4), y: 64, width: CGFloat((iPadVc.view.frame.size.width) - (iPadVc.view.frame.size.width)/2.4), height: CGFloat(iPadVc.view.frame.size.height-64))

                iPadVc.view?.addSubview(countryVC.view)

            }


        }
}

【问题讨论】:

  • 添加视图控制器替换的代码,你试过了。那只适用于iPad。你也支持 iPhone 吗?
  • @Subramanian 暂时仅适用于 iPad,而对于 iPhone,屏幕的显示会有所不同,我为 iPhone 制作了所有内容,但在 iPad 上卡住了。 ://
  • 你可以添加你尝试过的代码吗?
  • @Subramanian 我更新了我的问题。
  • 您分配了 'iPadVc' 并且没有显示您正在添加 countryVC 视图。您刚刚分配了 vc,但 vc view 在您添加时将为空。

标签: ios uitableview ipad swift3 subviews


【解决方案1】:

您分配了“iPadVc”,但没有提供您正在尝试添加 countryVC 视图。这是错误的。您刚刚分配了 vc,但在您添加时,vc view 将是 nil

我的建议:将vcA 对象引用传递给vcB,同时将vcB.view 添加到vcA.view

class vcA: UIViewController {

   func loadSlideVC() {
     viewcontrollerB = //Initialize the vcB 
     viewControllerB.containerVC = self
     //Add the view to vaA
   }
}

class vcB: UIViewController {
  weak var containerVC: vcA?

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  if UIDevice.Display.typeIsLike == UIDevice.DisplayType.ipad {
     if indexPath.section == 0 && indexPath.row == 0 {

        var sliderVC: SettingsViewController! = nil
        sliderVC = self.storyboard?.instantiateViewController(withIdentifier: "SettingsViewController") as! SettingsViewController
        containerVC?.view?.addSubview(sliderVC.view)
     }
    }
  }

}

【讨论】:

  • SliderVC 将固定在屏幕上,假设我选择国家,然后在 SliderVC 旁边,它将添加SubView 国家视图控制器视图。
  • 和 iPad 的设置画面一模一样。
  • 从slideVC中点击国家时你添加的vc是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2021-03-12
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多