1

我遇到了这个问题,因为我最初在主 NIB 中制作了所有内容,但是在阅读后了解到最好使用子视图。

我在 AppDelegate 中有我的 IBActions,并且我已经成功连接并加载了我的子视图。但是,当我尝试将子视图中的按钮连接到 AppDelegate 中的 IBAction 时,IBAction 会出现在“First Responder”下。它们似乎连接得很好,但是在运行应用程序时它们不会触发 IBActions(我已经用一些 NSLogs 确认了这一点,这不是 IBActions 中的代码错误)。我究竟做错了什么?

谢谢!

4

1 回答 1

1

AppDelegate 应该只用于非常具体的项目,例如实现UIApplicationDelegate协议(即方法,如applicationDidFinishLaunching)或在某些情况下存储全局变量。

您应该将 IBActions 和其他出口保存在它们各自的视图控制器文件中(即,如果您创建了与 MyViewController.xib 链接的 MyViewController.h 和 MyViewController.m,其中有一些按钮、图像等)。然后可以通过将所需的检查器控件(即 TouchUpInside)拖动到文件所有者来连接它们。

您应该阅读以更好地理解视图控制器的内容:http: //developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

通常最好为您将呈现给用户的每个视图创建一个唯一的视图控制器。例如,如果我有一个主屏幕,然后是一个“关于”或设置屏幕,我会让每个屏幕成为他们自己的视图控制器。与使用一个视图和一大堆隐藏/显示的子视图相比,它有助于更​​好地组织事物,并且还将改善加载时间和总体性能。

在有关访问应用程序委托的评论中更新您的第二个问题:

首先,您需要将#import "AppDelegate.h"应用程序委托的 .h 文件(即 )导入您想要使用的任何视图控制器 .m 文件,以访问您存储在应用程序委托文件中的任何变量、数组等。确保在应用代理的 .m 文件中合成在应用代理的 .h 文件中创建的任何对象,以便创建 getter 和 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]; 
 }

希望有帮助!

于 2010-06-30T03:59:57.670 回答