2010-06-30 67 views
1

我遇到了這個問題,因爲我原來在主要的NIB中做了所有的事情,但是在閱讀後發現它最好使用子視圖。UIView(子視圖)不發送IBActions到AppDelegate

我已經在AppDelegate中獲得了IBActions,並且已成功連接並加載了我的子視圖。但是,當我嘗試將子視圖中的按鈕連接到AppDelegate中的IBActions時,IBActions顯示在「First Responder」下。它們似乎連接良好,但是在運行應用程序時,它們不會觸發IBActions(我已經通過一些NSLog確認了這一點,但它不是IBActions內代碼的錯誤)。我究竟做錯了什麼?

謝謝!

回答

1

AppDelegate只能用於非常特定的項目,例如實施UIApplicationDelegate協議(即applicationDidFinishLaunching等方法),或者在某些情況下存儲全局變量。

您應該將IBActions和其他插件保留在它們各自的視圖控制器文件中(即,如果您創建了與MyViewController.xib鏈接的MyViewController.h和MyViewController.m,並且您有一些按鈕,圖像等)。然後,可以通過將所需的檢查器控件(即TouchUpInside)拖動到文件所有者來連接它們。

你應該閱讀,以便更好地瞭解視圖控制器:http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

通常最好是爲每一個獨特的視圖控制器查看您將呈現給用戶。例如,如果我有一個主屏幕,然後是「關於」或設置屏幕,我會讓他們自己的視圖控制器。它有助於組織更好的事情,比使用一個隱藏/顯示一堆子視圖的視圖更好,並且還可以提高加載時間和一般性能。

更新的有關訪問應用程序委託的評論你的第二個問題:

首先,你需要導入.h文件(即#import "AppDelegate.h")的應用程序委託到的任何視圖控制器.m文件你想用來訪問存儲在應用程序委託文件中的任何變量,數組等。確保你在應用程序委託的.m文件中的應用程序委託的.h文件中創建的任何對象進行合成,以便創建getters和setter(以便您可以訪問它們)。

然後在視圖控制器.m文件,在任何一種方法使用的是:

-(void)someMethod { 
// here we just create a shortcut to the app delegate called "theAppDelegate" 
YourAppDelegateFileNameHere *theAppDelegate = (YourAppDelegateFileNameHere *)[[UIApplication sharedApplication] delegate]; 

// now you can use the dot notation if you wanna access a variable 
int SomeNewInteger = theAppDelegate.someIntegerYouHaveStored; 

// or some array you have stored 
return [theAppDelegate.someArrayYouCreated count]; 
} 

希望幫助!

+0

謝謝!在視圖控制器中從AppDelegate訪問對象怎麼樣?我宣佈AppDelegate是這樣的: //接口 AppDelegate * appDelegate; @property(nonatomic,retain)AppDelegate * appDelegate; // Implementation @synthesize appDelegate; appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; 但是當我嘗試做某事時,我總是會「訪問未知的getter方法」。抱歉,stackoverflow不會讓我很好地格式化我的評論。 – 2010-06-30 12:30:31

+0

請查看我的更新回覆,瞭解如何正確調用它。這與應用程序委託有點不同,因爲你不需要設置屬性或像你在做什麼合成它(這就是爲什麼你得到未知的getter方法錯誤) – iwasrobbed 2010-06-30 13:14:07

+0

P.S.如果答案對你有用,請養成習慣於對最有用的答案作出回答。這有點像在背後給予人們拍拍他們的幫助:) – iwasrobbed 2010-06-30 13:16:29