2016-11-23 44 views
0

我有一個ViewController(BViewController),它是繼承自另一個UIViewController子類(AViewController)。 (我想這樣做的原因是,我重新使用故事板3次以上的不同的屏幕相同的看法。)Swift3:投射UIViewController子類失敗

當我打電話:

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() 
    } 
} 

在故事板類,因爲我想分享所有的孩子IBOutlets而無需重新創建視圖設置爲AViewController。我的UIStoryboard中只有一個View Controller Scene

+2

如果你設置了類'AViewController'情節板中的你不能投你的視圖控制器'BViewController'(AViewController'的'子類或不)。 – albertamg

+2

B是A,但A不是B,這意味着您可以將B投射到A,但不投A到B. – Mercurial

+0

我取消設置類,現在我得到:無法將'UIViewController'類型的值(0x10260c718)轉換爲' test.BViewController'(0x1009bf3f0)。 – arooo

回答

0

你可能不把正確的視圖控制器標識:

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

(的AViewController BViewController代替)

編輯: 這裏有一個例子:我有一個SignupVC視圖控制器我的故事板,但它的故事板ID是「signup_vc」

enter image description here

+0

標識符是AViewController,因爲這是父類 - 所有後繼的子類AViewController(CViewController,DViewController)使用單個UIViewController與標識符AViewController共享IBOutlets – arooo

+0

不過,我認爲你應該把BViewController作爲故事板標識符放在你的第二個視圖控制器和你的第一個AViewController。 –

+0

他們可以有不同的故事板ID,即使其中一個是其他人的父母。故事板ID(放在故事板中)不是課程名稱。 –

0

您必須將您的視圖控制器的類設置爲故事板中的BViewController

相關問題