Uiview(子视图)不将iBactions发送到AppDelegate
-
01-10-2019 - |
题
我遇到这个问题,因为我最初是在主笔尖中制作的所有东西,但是在阅读后,我了解到使用子视图最好。
我在AppDelegate中有iBactions,并且已经成功地连接并加载了我的子视图。但是,当我尝试将子视图中的按钮连接到AppDelegate中的Ibactions时,iBactions出现在“第一响应者”下。它们似乎连接正常,但是在运行应用程序时,它们不会触发iBactions(我已经用一些NSLOG确认了这一点,这不是Ibactions中代码中的错误)。我究竟做错了什么?
谢谢!
解决方案
AppDelegate仅应用于非常具体的项目,例如实施 UIApplicationDelegate
协议(即类似的方法 applicationDidFinishLaunching
)或在某些情况下存储全局变量。
您应该将Ibactions和其他插座保留在其各自的视图控制器文件中(即,如果创建MyViewController.h和myviewController.m,它们与myViewController.xib链接在一起,其中您有一些按钮,映像等)。然后,可以通过将您想要的检查器控件(即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];
}
希望有帮助!