2011-12-28 36 views
1

我想加載一個視圖控制器包含在一個引用的庫以及一個單獨的資產包。爲了做到這一點,我相信我需要使用initWithNibName方法。我已經添加了以下額外的mTouch參數:MonoTouch UIViewController initWithNibName

-v -v -v -gcc_flags "-L${TargetDir} -F${TargetDir} -F${ProjectDir} -F${TargetDir}/Test.embeddedframework -framework Test" 

這種Objective-C的片段不正是我需要做的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
NSBundle *myBundle = [NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/Test.embeddedframework",[[NSBundle mainBundle] bundlePath]]]; 
NSString *nib = [myBundle pathForResource:@"TestViewController" ofType:@"nib"]; 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.viewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:myBundle]; 

self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 
return YES; 
} 

從內MonoTouch的,我已經能夠加載編譯和綁定加載資產包。但我不知道如何發送消息'initWithNibName'。 API文檔對於此方法並不完整,但在UIViewController上顯示一個構造函數,它將接受nib名稱和包。但是,這似乎並未包含在生成的DLL中。

http://iosapi.xamarin.com/?link=C%3aMonoTouch.UIKit.UIViewController(System.String%2cMonoTouch.Foundation.NSBundle

有沒有人有做這樣的事情的任何經驗或有任何建議,如何能夠實現?

回答

1

如果對選擇器有疑問,找到MonoTouch匹配的最佳方法之一是使用Miguel的Rosetta Stone。這會告訴你哪個方法(或構造函數)也綁定了一個特定的選擇器。

如果你想繼承的形式現有類型(例如,使用btouch),那麼你應該寫一些額外的代碼(在一個單獨的.cs文件)生成的.dll文件(有點像你喜歡的其他enums內進行編譯添加到綁定的API)。這是可能的,因爲發電機將產生(源明智的)部分類別。

+0

感謝您的鏈接,我以前沒有遇到過。但是,這似乎並沒有多大幫助。我看到構造函數被定義,與API文檔中的相同 - 但我仍然沒有在生成的dll中看到這個。我確實爲該類創建了綁定,但由於消息「initWithNibName」直接位於UIViewController上,因此我沒有定義自己的綁定。這是一個錯誤嗎? 基本上我的api.cs類幾乎是空的,因爲我現在除了擴展UIViewController外什麼都沒做。我爲控制器定義了一個接口,但沒有附加的實例方法。讓運行正常。 – 2011-12-29 09:02:12

+0

我接受了建議,並特別添加了如下綁定的構造函數:[Export(「initWithNibName:bundle:」)] IntPtr Constructor(string nibName,NSBundle bundle);但是當我嘗試使用它時,我得到:無法在bundle中加載NIB:'NSBundle <..../TestHarness.app/Test.embeddedframework>(尚未加載)',名稱爲'TestViewController.nib'我一直在在過去的這個錯誤,並沒有一個解決方案 - 任何進一步的建議?再次感謝 – 2011-12-30 05:09:20

相關問題