2010-08-21 29 views
0

我正在編寫一個供開發人員用於iPhone的庫(類似於OpenFeint的實現方式),我正在嘗試創建一個具有關聯的ViewController廈門國際銀行,這樣我可以用爲編程式顯示創建一個新的ViewController和xib(帶有addSubview)

SplashScreenViewController *splashScreenViewController = [[SplashScreenViewController alloc] init]; 
UIWindow *topApplicationWindow = [self getTopWindow]; 
[topApplicationWindow addSubview:splashScreenViewController.view]; 

然而實例它在我的代碼,而這一點也適用簡單的控制(UIButtons等),沒有出現與我SplashScreenViewController。 SplashScreenViewController非常簡單:

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 


@interface SplashScreenView : UIViewController { 
} 

@end 

並且實現爲空。在我的View XIB(SplashScreenView.xib)中,我已經嘗試將文件所有者的類設置爲SplashScreenViewController,但它沒有起作用,然後我按照我在OpenFeint中看到的方式嘗試這種方法,即在IB中添加View Controller,使主UIView成爲它的一個子類,並使其成爲類SplashScreenViewController。這也不起作用(不顯示)。

我想知道是否有人對我可能缺少的東西有一個好主意,或者如果有人可以推薦我試圖創建新的ViewController的演練。

謝謝!

回答

1

嘗試兩件事:

  1. 呼叫initWithNibName不只是初始化。也許你所說的OpenFeint重寫init來調用initWithNibName,這就是爲什麼你沒有看到它。

  2. 將SplashScreenViewController設置爲您的文件所有者,並將其視圖插座連接到您在IB中的 視圖。

希望它有幫助。

+0

'init'只是'initWithNibName:nil bundle:nil'。當nibName爲nil時,默認的loadView使用類名稱(推測是[[self class] description]或[self className])。 – 2010-08-21 07:41:09

+0

這仍然可能是問題所在。 請注意,他的xib在其控制器類爲「SplashScreenViewController」時將其名稱命名爲「SplashScreenView.xib」。 我假設他把m文件寫錯了,否則我不知道爲什麼SplashScreenView會從UIViewController繼承。 – Idan 2010-08-21 09:33:32

+0

我重寫了代碼以更適用於此問題,而不是使用我需要在我的項目中重構的名稱。所以,是的。 XIB名稱與實際庫中的ViewController名稱不同。對於這種困惑感到抱歉。 您的建議確實有效。 OpenFeint似乎沒有使用'initWithNibName:bundle:'來做這件事,所以我暫時將這個問題保持開放。如果任何人有任何想法如何做到這一點,而不使用'initWithNibName:bundle:',我會檢查它作爲一個答案。否則,我會檢查這一個。 – user426856 2010-08-22 23:41:57

0

而不是[splashScreenViewController alloc],請嘗試[SplashScreenViewController alloc]。我很驚訝你沒有收到編譯器警告。

+0

插入代碼時,我使用了一些創造性來增強可讀性,並輸入了alloc語句。它實際上是[SplashScreenViewController alloc]在我的代碼中。抱歉 – user426856 2010-08-22 22:32:41

相關問題