2017-03-20 75 views
0

我有2個故事板:Activities.storyboardContacts.storyboardXamarin iOS - 加載故事板參考編程式

對我有一個ViewController:ContactDetails

Activities.storyboard我需要參考的ContactDetailsContacts.storyboard

我創建了一個Activities.storyboardStoryboard Reference引用的ContactDetails

我試着加載這個視圖控制器編程

var viewController = Storyboard.InstantiateViewController(nameof(ContactDetails)); 
NavigationController.PushViewController(viewController, true); 

但我沒有工作,以編程方式加載作爲普通視圖控制器

Foundation.MonoTouchException:Objective-拋出C異常。名稱: NSInvalidArgumentException原因:故事板()不包含一個視圖控制器標識 「ContactDetails」

我知道它的工作原理是這樣的:

var storyboard = UIStoryboard.FromName(nameof(Contact), null); 
var viewController = storyboard.InstantiateViewController(nameof(ContactDetails)); 
NavigationController.PushViewController(viewController, true); 

但我想用一個參考視圖控制器,有可能嗎?

+0

我相當肯定,它是更常見的是使用一個名爲「故事板ID」的UIViewController的財產當試圖從應用程序故事板實例化時,該故事板ID還可以充當「恢復標識符」。 – Digitalsa1nt

回答

0

顯然加載Storyboard Reference的唯一方法是與Segue

編程的唯一方法就是實例化Storyboard和實例化後的ViewController

像這樣:

var storyboard = UIStoryboard.FromName(nameof(Contact), null); 
var viewController = storyboard.InstantiateViewController(nameof(ContactDetails)); 
NavigationController.PushViewController(viewController, true); 
1

如果您使用故事板ID,它也可以用作「恢復標識符」,並允許您從故事板實例化。我建議使用這種方法,它往往是實現你想要做的最簡單的方法。

enter image description here

另外值得一提的是,你必須實例化的UIViewController投給它的類型(至少我覺得它使生活更容易,如果我想跨變量和這樣的傳遞。)

ContactDetails viewController = Storyboard.InstantiateViewController(nameof(ContactDetails)) as ContactDetails; 

OR

ContactDetails viewController = Storyboard.InstantiateViewController("ContactDetails") as ContactDetails; 

另外值得一提的是,UIViewController中的Xamarin iOS的「故事板」屬性自動確定在S這是值得檢查的是,它肯定會給你帶來指向'聯繫'故事板的指針(因爲當你選擇iOS開發時,多個故事板當然是可能的)。

+0

我想我沒有表達自己的權利。我有2個故事板,我需要從一個到另一個引用一個ViewController。請看我的版本。我試過Cast,但沒有奏效。 – Lnacer

+0

好吧,向我解釋使用上面說過的代碼的問題。對我來說看起來很好,你創建了一個你想訪問的故事板的引用,然後你實例化了viewcontroller。我覺得好像我想念你爲什麼不能那樣做? – Digitalsa1nt