Swift3:转换UIViewController子类失败

时间:2016-11-23 09:33:50

标签: ios swift uikit swift3

我有一个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而不重新创建视图。我View Controller Scene中只有一个UIStoryboard

3 个答案:

答案 0 :(得分:1)

根据该主题中的答案,不可能重用具有UIStoryBoard的多个子类的单个UIViewController场景。但是可以使用nib文件。

How to use single storyboard uiviewcontroller for multiple subclass

答案 1 :(得分:0)

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

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"

enter image description here

答案 2 :(得分:0)

您必须在故事板中将视图控制器的类设置为BViewController