2010-06-30 31 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