繁体   English   中英

Swift3:转换UIViewController子类失败

[英]Swift3: Casting UIViewController Subclass Fails

我有一个ViewController( BViewController ),它继承自另一个UIViewController子类( AViewController )。 (我要这样做的原因是我在情节提要中重复使用同一视图3次以上以用于不同的屏幕。)

当我打电话时:

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "AViewController") as! BViewController
        self.show(vc, sender: self)

我收到此错误:

Could not cast value of type 'test.AViewController' (0x10d08b478) to 'test.BViewController' (0x10d08b3f0).

这是我的子类,其中没有任何子类。

class AViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

--

class BViewController: AViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

故事板中的类设置为AViewController因为我试图在所有子级之间共享IBOutlets ,而无需重新创建视图。 我的UIStoryboard只有一个View Controller Scene

根据该线程的答案,不可能通过UIStoryBoard将单个UIViewController场景与多个子类重用。 但是,nib文件是可能的。

如何将单个故事板uiviewcontroller用于多个子类

您可能没有放置正确的视图控制器标识符:

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "BViewController") as! BViewController
self.show(vc, sender: self)

(BViewController而不是AViewController)

编辑 :这是一个示例:我的情节提要中有一个SignupVC视图控制器,但其情节提要ID为“ signup_vc”

在此处输入图片说明

您必须在情节提要中将视图控制器的类设置为BViewController

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM