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

如何向下投射uiviewcontroller swift

  •  0
  • Adam  · 技术社区  · 6 年前

    基础视图控制器

    import UIKit
    
    class SubViewPost: UIViewController {
    
        @IBOutlet weak var content: UILabel!
    
        @IBOutlet weak var recommendCount: UILabel!
        @IBOutlet weak var recommendButton: UIButton!
    
        var postInfo:PostInfo!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    

    子视图控制器

    import UIKit
    
    class SubViewOne: SubViewPost {
    
        @IBAction func likeWorry(_ sender: Any) {
            Option.recommend(postInfo: postInfo, mRecommendCount: recommendCount, mRecommendButton: recommendButton)
    
        }
    
    
    
    }
    

    和另一个子视图控制器

    import UIKit
    
    class SubViewTwo: SubViewPost {
    
        override func viewDidLoad() {
            recommendCount.alpha=0
            recommendButton.alpha=0
        }
    
    
    }
    

    我要添加SubviewOne或SubviewTwo

    我的父视图

    var subViewPost:SubViewPost
    
     if postType == 1{
     subViewPost = storyboard?.instantiateViewController(withIdentifier: "SubViewPost") as! SubViewOne
     }else{
    subViewPost = storyboard?.instantiateViewController(withIdentifier: "SubViewPost") as! SubViewTwo
     }
    
     containerView.addSubview(subViewPost.view)
    

    引发错误

    Could not cast value of type 
    'MyApp.SubViewPost' (0x101151728) to 'MyApp.SubViewOne' (0x10114d9d0).
    
    2018-07-10 14:40:56.007436+0900 MyApp[7207:209932] 
    Could not cast value of type 'MyApp.SubViewPost' (0x101151728) to 'MyApp.SubViewOne' (0x10114d9d0).
    

    如何根据PostType来实现Chagne视图控制器

    子视图一已被记录

    但是Subview 2没有推荐

    子视图1,2具有相同的用户界面

    2 回复  |  直到 6 年前
        1
  •  0
  •   Paulw11    6 年前

    这个 UViewController 脚本中场景“SubviewPost”的类设置为 SubViewPost 这就是 instantiateViewController 会回来的。您不能向下强制转换的实例 子视图发布 SubViewOne SubViewTwo .

    您可以在故事板中定义两个相同的场景,每个场景都具有适当的视图控制器类,但这需要大量的重复。

    因为唯一的区别是 recommendButton recommendCount 元素,为什么不通过属性来处理它:

    var subViewPost = storyboard?.instantiateViewController(withIdentifier: "SubViewPost") as! SubViewPost
    
    subViewPost.recommendVisible = (postType == 1)
    

    子视图post.swift

    var recommendVisible = true 
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        recommendCount.isHidden = !recommendVisible
        recommendButton.isHidden = !recommendVisible
    }
    
        2
  •  0
  •   matt    6 年前

    错误消息已清除。当你说

    storyboard?.instantiateViewController(withIdentifier: "SubViewPost")
    

    你从故事板中得到的是一个视图控制器,它的类是SubviewPost。你不能挥动一根魔法铸棒宣称它是一个子视图,而事实并非如此。

    如果希望此视图控制器是SubviewOne,则应将其声明为SubviewOne。 在故事板中 在身份检查员中。


    我想我知道你在做什么,为什么你对为什么不能这样做感到困惑。

    故事板里的是 实例 不是一门课。是的,它是某个类的实例,但它是该类的实例。因此,当您在故事板中设计接口时,您正在设计关联的接口 有那么一个例子 那一类的。

    如果你的目标是 与多个类关联的单个接口 ,必须生成接口 在代码中